diff --git a/examples/cookbooks/AI-CourtSimulation.ipynb b/examples/cookbooks/AI-CourtSimulation.ipynb new file mode 100644 index 00000000..29ebe1f1 --- /dev/null +++ b/examples/cookbooks/AI-CourtSimulation.ipynb @@ -0,0 +1,1614 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4c03cd7e", + "metadata": { + "id": "4c03cd7e" + }, + "source": [ + "# โ๏ธ AI-Court Simulation\n", + "\n", + "A simplified court case simulation with essential AI agents." + ] + }, + { + "cell_type": "markdown", + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/LegaliaAI_MiniCourt.ipynb)\n" + ], + "metadata": { + "id": "k0GmORjCRMGL" + }, + "id": "k0GmORjCRMGL" + }, + { + "cell_type": "markdown", + "id": "98fc3316", + "metadata": { + "id": "98fc3316" + }, + "source": [ + "## Install Dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb57c529", + "metadata": { + "id": "bb57c529" + }, + "outputs": [], + "source": [ + "!pip install praisonaiagents openai python-dotenv" + ] + }, + { + "cell_type": "markdown", + "id": "cfdb1a0c", + "metadata": { + "id": "cfdb1a0c" + }, + "source": [ + "## Import Libraries & Setup" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "f7c5e0a6", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "f7c5e0a6", + "outputId": "20b3baf7-6099-4c35-8ec8-9d5659553c30" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "โ Setup complete!\n" + ] + } + ], + "source": [ + "import os\n", + "from dotenv import load_dotenv\n", + "from IPython.display import display, HTML\n", + "import time\n", + "\n", + "load_dotenv()\n", + "\n", + "# Setup API key\n", + "api_key = os.getenv('OPENAI_API_KEY')\n", + "if not api_key:\n", + " print(\"๐ Enter your OpenAI API key:\")\n", + " api_key = input(\"API Key: \").strip()\n", + " os.environ['OPENAI_API_KEY'] = \"Enter your api key\"\n", + "\n", + "print(\"โ Setup complete!\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "b6c7c2f3", + "metadata": { + "id": "b6c7c2f3" + }, + "source": [ + "## Create Mini Agents" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "6d7a8426", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6d7a8426", + "outputId": "7851dfcc-14e1-4714-fc84-f26289d87dcf" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "โ Mini agents created!\n" + ] + } + ], + "source": [ + "from praisonaiagents import Agent\n", + "\n", + "# Judge Agent\n", + "judge = Agent(\n", + " name=\"Judge\",\n", + " role=\"Preside over court proceedings\",\n", + " llm=\"gpt-4o-mini\",\n", + " instructions=[\n", + " \"You are an impartial judge\",\n", + " \"Make fair decisions based on evidence\",\n", + " \"Keep responses under 100 words\"\n", + " ],\n", + " markdown=True\n", + ")\n", + "\n", + "# Prosecutor Agent\n", + "prosecutor = Agent(\n", + " name=\"Prosecutor\",\n", + " role=\"Present case against defendant\",\n", + " llm=\"gpt-4o-mini\",\n", + " instructions=[\n", + " \"You are a prosecutor seeking conviction\",\n", + " \"Present evidence methodically\",\n", + " \"Keep responses under 80 words\"\n", + " ],\n", + " markdown=True\n", + ")\n", + "\n", + "# Defense Agent\n", + "defense = Agent(\n", + " name=\"Defense\",\n", + " role=\"Defend the accused\",\n", + " llm=\"gpt-4o-mini\",\n", + " instructions=[\n", + " \"You are a defense attorney\",\n", + " \"Create reasonable doubt\",\n", + " \"Keep responses under 80 words\"\n", + " ],\n", + " markdown=True\n", + ")\n", + "\n", + "# Witness Agent\n", + "witness = Agent(\n", + " name=\"Witness\",\n", + " role=\"Provide testimony\",\n", + " llm=\"gpt-4o-mini\",\n", + " instructions=[\n", + " \"You are a witness testifying\",\n", + " \"Provide factual testimony\",\n", + " \"Keep responses under 60 words\"\n", + " ],\n", + " markdown=True\n", + ")\n", + "\n", + "print(\"โ Mini agents created!\")\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Case Details Input" + ], + "metadata": { + "id": "eMSO8H5jQx5O" + }, + "id": "eMSO8H5jQx5O" + }, + { + "cell_type": "code", + "source": [ + "# Simple case details\n", + "case_title = input(\"Case Title (e.g., 'State vs. Smith'): \") or \"State vs. Smith\"\n", + "case_description = input(\"Case Description: \") or \"Theft case involving stolen laptop\"\n", + "evidence = input(\"Key Evidence: \") or \"Security camera footage and witness testimony\"\n", + "\n", + "print(f\"\\n๐ Case: {case_title}\")\n", + "print(f\"๐ Description: {case_description}\")\n", + "print(f\"๐ Evidence: {evidence}\")\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fAIzu_3vPaHJ", + "outputId": "1df808db-e911-4e9f-ccf4-8c101040f89a" + }, + "id": "fAIzu_3vPaHJ", + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Case Title (e.g., 'State vs. Smith'): Doe vs. Wilson\n", + "Case Description: The plaintiff claims to have suffered emotional distress due to repeated online harassment\n", + "Key Evidence: Screenshots of messages, social media posts, therapistโs report\n", + "\n", + "๐ Case: Doe vs. Wilson\n", + "๐ Description: The plaintiff claims to have suffered emotional distress due to repeated online harassment\n", + "๐ Evidence: Screenshots of messages, social media posts, therapistโs report\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "id": "6e418e95", + "metadata": { + "id": "6e418e95" + }, + "source": [ + "# Helper Functions (Fixed with .start())## Cell 4: Case Details Input" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "fd9da25c", + "metadata": { + "id": "fd9da25c" + }, + "outputs": [], + "source": [ + "# Display function\n", + "def show_message(name, role, message, color=\"#4CAF50\"):\n", + " html = f\"\"\"\n", + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Judge โ\n", + "โ Role: Preside over court proceedings โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "74964427de63470da100903aac0b8c78" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 3.9s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 3.9s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You are Judge presiding over \"Doe vs. Wilson\". Open the court proceedings professionally. Case: The plaintiff \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m claims to have suffered emotional distress due to repeated online harassment Keep it brief and formal. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You are Judge presiding over \"Doe vs. Wilson\". Open the court proceedings professionally. Case: The plaintiff โ\n", + "โ claims to have suffered emotional distress due to repeated online harassment Keep it brief and formal. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Court is now in session. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Case number 2023-001: Doe vs. Wilson. The plaintiff, Ms. Doe, alleges emotional distress resulting from \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m repeated online harassment by the defendant, Mr. Wilson. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Both parties will present their evidence and arguments. I remind all present to maintain decorum. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Let us proceed with the plaintiff's opening statement. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Court is now in session. โ\n", + "โ โ\n", + "โ Case number 2023-001: Doe vs. Wilson. The plaintiff, Ms. Doe, alleges emotional distress resulting from โ\n", + "โ repeated online harassment by the defendant, Mr. Wilson. โ\n", + "โ โ\n", + "โ Both parties will present their evidence and arguments. I remind all present to maintain decorum. โ\n", + "โ โ\n", + "โ Let us proceed with the plaintiff's opening statement. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Prosecutor โ\n", + "โ Role: Present case against defendant โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "9e740fc3b45c454e96dfe29b4c0edb53" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 3.1s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 3.1s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You are the Prosecutor for \"Doe vs. Wilson\". Give your opening statement. Evidence: Screenshots of messages, \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m social media posts, therapistโs report Be confident and factual. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You are the Prosecutor for \"Doe vs. Wilson\". Give your opening statement. Evidence: Screenshots of messages, โ\n", + "โ social media posts, therapistโs report Be confident and factual. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Ladies and gentlemen of the jury, today we present clear evidence against the defendant, Wilson. We will show \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m you screenshots of messages that reveal intent and motive, alongside social media posts that further \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m corroborate this behavior. Additionally, a therapistโs report will demonstrate the psychological impact on the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m victim, Doe. This evidence will establish a pattern of harassment and intimidation. We ask you to consider the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m facts carefully and deliver a just verdict. Thank you. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Ladies and gentlemen of the jury, today we present clear evidence against the defendant, Wilson. We will show โ\n", + "โ you screenshots of messages that reveal intent and motive, alongside social media posts that further โ\n", + "โ corroborate this behavior. Additionally, a therapistโs report will demonstrate the psychological impact on the โ\n", + "โ victim, Doe. This evidence will establish a pattern of harassment and intimidation. We ask you to consider the โ\n", + "โ facts carefully and deliver a just verdict. Thank you. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Defense โ\n", + "โ Role: Defend the accused โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "c0c194ce705f4418961c84f0bacb1acf" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 3.3s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 3.3s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You are the Defense Attorney for \"Doe vs. Wilson\". Give your opening statement. Challenge the prosecution's \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m case. Emphasize presumption of innocence. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You are the Defense Attorney for \"Doe vs. Wilson\". Give your opening statement. Challenge the prosecution's โ\n", + "โ case. Emphasize presumption of innocence. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Ladies and gentlemen of the jury, today you will hear the prosecution's case against my client, Mr. Wilson. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m However, I urge you to remember that the burden of proof lies with them. They must prove guilt beyond a \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m reasonable doubt. We will show that the evidence is circumstantial, unreliable, and lacks credibility. Mr. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Wilson is presumed innocent until proven guilty, and we will demonstrate that reasonable doubt exists in this \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m case. Thank you. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Ladies and gentlemen of the jury, today you will hear the prosecution's case against my client, Mr. Wilson. โ\n", + "โ However, I urge you to remember that the burden of proof lies with them. They must prove guilt beyond a โ\n", + "โ reasonable doubt. We will show that the evidence is circumstantial, unreliable, and lacks credibility. Mr. โ\n", + "โ Wilson is presumed innocent until proven guilty, and we will demonstrate that reasonable doubt exists in this โ\n", + "โ case. Thank you. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Witness โ\n", + "โ Role: Provide testimony โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "f4d166f4a67e41679066f05d4f224c31" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 2.3s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 2.3s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You are a witness in \"Doe vs. Wilson\". Provide your testimony about what you saw. Evidence: Screenshots of \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m messages, social media posts, therapistโs report Be factual and clear. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You are a witness in \"Doe vs. Wilson\". Provide your testimony about what you saw. Evidence: Screenshots of โ\n", + "โ messages, social media posts, therapistโs report Be factual and clear. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m On March 15, 2023, I observed a series of messages exchanged between Doe and Wilson on social media, indicating \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m a heated argument. The screenshots show Wilson making threatening remarks. Additionally, the therapist's report \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m dated March 20, 2023, confirms Doe's emotional distress linked to these interactions. I can confirm the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m authenticity of these documents. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ On March 15, 2023, I observed a series of messages exchanged between Doe and Wilson on social media, indicating โ\n", + "โ a heated argument. The screenshots show Wilson making threatening remarks. Additionally, the therapist's report โ\n", + "โ dated March 20, 2023, confirms Doe's emotional distress linked to these interactions. I can confirm the โ\n", + "โ authenticity of these documents. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Judge โ\n", + "โ Role: Preside over court proceedings โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "801192cdda5e4736bc53dba478e1dcc1" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 2.3s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 2.3s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You are Judge presiding over \"Doe vs. Wilson\". Deliver your final verdict. Consider all evidence: Screenshots \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m of messages, social media posts, therapistโs report Be fair and explain your reasoning. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You are Judge presiding over \"Doe vs. Wilson\". Deliver your final verdict. Consider all evidence: Screenshots โ\n", + "โ of messages, social media posts, therapistโs report Be fair and explain your reasoning. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m After careful consideration of the evidence presented, including the screenshots of messages, social media \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m posts, and the therapist's report, I find that the plaintiff, Ms. Doe, has demonstrated a credible case of \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m emotional distress due to the defendant's actions. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m The evidence shows a pattern of harassment that has significantly impacted Ms. Doe's mental well-being. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Therefore, I rule in favor of the plaintiff. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Mr. Wilson is ordered to cease all forms of contact with Ms. Doe and to pay damages for the emotional distress \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m caused. Court is adjourned. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ After careful consideration of the evidence presented, including the screenshots of messages, social media โ\n", + "โ posts, and the therapist's report, I find that the plaintiff, Ms. Doe, has demonstrated a credible case of โ\n", + "โ emotional distress due to the defendant's actions. โ\n", + "โ โ\n", + "โ The evidence shows a pattern of harassment that has significantly impacted Ms. Doe's mental well-being. โ\n", + "โ Therefore, I rule in favor of the plaintiff. โ\n", + "โ โ\n", + "โ Mr. Wilson is ordered to cease all forms of contact with Ms. Doe and to pay damages for the emotional distress โ\n", + "โ caused. Court is adjourned. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 3.8s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ Court is now in session. โ\nโ โ\nโ Case number 2023-001: Doe vs. Wilson. The plaintiff, Ms. Doe, alleges emotional distress resulting from โ\nโ repeated online harassment by the defendant, Mr. Wilson. โ\nโ โ\nโ Both parties will present their evidence and arguments. I remind all present to maintain decorum. โ\nโ โ\nโ Let us proceed with the plaintiff's โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "45ff535d008a4b30b53a0e72edee016b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9e740fc3b45c454e96dfe29b4c0edb53": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_c04a2ce5fcc544d8ac72aa67776c0fd0", + "msg_id": "", + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Generating... 2.9s \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n\u001b[32mโ\u001b[0m Ladies and gentlemen of the jury, today we present clear evidence against the defendant, Wilson. We will show \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m you screenshots of messages that reveal intent and motive, alongside social media posts that further \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m corroborate this behavior. Additionally, a therapistโs report will demonstrate the psychological impact on the \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m victim, Doe. This evidence will establish a pattern of harassment and intimidation. We ask you to consider the \u001b[32mโ\u001b[0m\n\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n", + "text/html": "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 2.9s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ Ladies and gentlemen of the jury, today we present clear evidence against the defendant, Wilson. We will show โ\nโ you screenshots of messages that reveal intent and motive, alongside social media posts that further โ\nโ corroborate this behavior. Additionally, a therapistโs report will demonstrate the psychological impact on the โ\nโ victim, Doe. This evidence will establish a pattern of harassment and intimidation. We ask you to consider the โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "c04a2ce5fcc544d8ac72aa67776c0fd0": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c0c194ce705f4418961c84f0bacb1acf": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_4ef74a10d03747608c9011027bfa877c", + "msg_id": "", + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Generating... 3.1s \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n\u001b[32mโ\u001b[0m Ladies and gentlemen of the jury, today you will hear the prosecution's case against my client, Mr. Wilson. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m However, I urge you to remember that the burden of proof lies with them. They must prove guilt beyond a \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m reasonable doubt. We will show that the evidence is circumstantial, unreliable, and lacks credibility. Mr. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m Wilson is presumed innocent until proven guilty, and we \u001b[32mโ\u001b[0m\n\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n", + "text/html": "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 3.1s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ Ladies and gentlemen of the jury, today you will hear the prosecution's case against my client, Mr. Wilson. โ\nโ However, I urge you to remember that the burden of proof lies with them. They must prove guilt beyond a โ\nโ reasonable doubt. We will show that the evidence is circumstantial, unreliable, and lacks credibility. Mr. โ\nโ Wilson is presumed innocent until proven guilty, and we โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "4ef74a10d03747608c9011027bfa877c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f4d166f4a67e41679066f05d4f224c31": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_f47eec09409e440091431311f3048518", + "msg_id": "", + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Generating... 2.1s \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n\u001b[32mโ\u001b[0m On March 15, 2023, I observed a series of messages exchanged between Doe and Wilson on social media, indicating \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m a heated argument. The screenshots show Wilson making threatening remarks. Additionally, the therapist's report \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m dated March 20, 2023, confirms Doe's emotional distress linked to these \u001b[32mโ\u001b[0m\n\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n", + "text/html": "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 2.1s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ On March 15, 2023, I observed a series of messages exchanged between Doe and Wilson on social media, indicating โ\nโ a heated argument. The screenshots show Wilson making threatening remarks. Additionally, the therapist's report โ\nโ dated March 20, 2023, confirms Doe's emotional distress linked to these โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "f47eec09409e440091431311f3048518": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "801192cdda5e4736bc53dba478e1dcc1": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_1928c67194d4409a9528a796bbe1fce1", + "msg_id": "", + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Generating... 2.1s \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n\u001b[32mโ\u001b[0m After careful consideration of the evidence presented, including the screenshots of messages, social media \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m posts, and the therapist's report, I find that the plaintiff, Ms. Doe, has demonstrated a credible case of \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m emotional distress due to the defendant's actions. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m The evidence shows a pattern of harassment that has significantly impacted Ms. Doe's mental well-being. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m Therefore, I rule in favor of the plaintiff. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m Mr. Wilson is ordered to cease all forms of contact with Ms. Doe and to pay damages \u001b[32mโ\u001b[0m\n\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n", + "text/html": "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 2.1s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ After careful consideration of the evidence presented, including the screenshots of messages, social media โ\nโ posts, and the therapist's report, I find that the plaintiff, Ms. Doe, has demonstrated a credible case of โ\nโ emotional distress due to the defendant's actions. โ\nโ โ\nโ The evidence shows a pattern of harassment that has significantly impacted Ms. Doe's mental well-being. โ\nโ Therefore, I rule in favor of the plaintiff. โ\nโ โ\nโ Mr. Wilson is ordered to cease all forms of contact with Ms. Doe and to pay damages โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "1928c67194d4409a9528a796bbe1fce1": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/cookbooks/Cybersecurity-PoC Agent.ipynb b/examples/cookbooks/Cybersecurity-PoC Agent.ipynb new file mode 100644 index 00000000..81f4e375 --- /dev/null +++ b/examples/cookbooks/Cybersecurity-PoC Agent.ipynb @@ -0,0 +1,233 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Pocky Query Tool: Automated CVE PoC Search & Validation\n", + "\n", + "A lightweight, web-scale agent that helps you find, filter, and fetch real-world PoC exploits โ so you don't have to.\n", + "\n", + "**Features:**\n", + "- Automatically searches multiple security-related websites\n", + "- Intelligently analyzes and extracts PoC code\n", + "- Automatically selects the most reliable PoC samples\n", + "- Supports collection of PoCs from multiple sources" + ], + "metadata": { + "id": "BdX56iM1r5aB" + } + }, + { + "cell_type": "markdown", + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Pocky_Cybersecurity_PoC_Agent.ipynb)\n" + ], + "metadata": { + "id": "VW766102tUUY" + } + }, + { + "cell_type": "markdown", + "source": [ + "# Install Dependencies" + ], + "metadata": { + "id": "cBu2iXmJsVqE" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install praisonaiagents exa-py python-dotenv requests beautifulsoup4" + ], + "metadata": { + "id": "VvbA3A7XsTFm" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Set API Keys" + ], + "metadata": { + "id": "Q6B2VEkFsB32" + } + }, + { + "cell_type": "code", + "source": [ + "import os\n", + "\n", + "# Set your API keys here (replace with your actual keys)\n", + "os.environ[\"EXA_API_KEY\"] = \"your api key\"\n", + "os.environ[\"OPENAI_API_KEY\"] = \"your api key\"\n", + "os.environ[\"OPENAI_BASE_URL\"] = \"https://api.openai.com/v1\" # Optional, for custom OpenAI endpoints" + ], + "metadata": { + "id": "OlOI3yc_sAkN" + }, + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Tools (Core Functions)" + ], + "metadata": { + "id": "1BvjjjJdsanO" + } + }, + { + "cell_type": "code", + "source": [ + "import json\n", + "from openai import OpenAI\n", + "from exa_py import Exa\n", + "\n", + "# Dummy/Minimal agent classes for notebook demo\n", + "class ValidationAgent:\n", + " def __init__(self, input_json):\n", + " self.input_json = input_json\n", + " def run(self):\n", + " # Dummy validation logic for notebook demo\n", + " data = json.loads(self.input_json)\n", + " return True if \"attack_intent\" in data and \"poc_sample\" in data else False\n", + "\n", + "class AttackIntentAgent:\n", + " def __init__(self, description):\n", + " self.description = description\n", + " def run(self):\n", + " # Dummy intent extraction for notebook demo\n", + " return f\"Intent for: {self.description[:50]}...\"" + ], + "metadata": { + "id": "GYfAJLXOsbga" + }, + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## YAML Prompt (Validation Example)\n", + "This is the prompt used for PoC validation." + ], + "metadata": { + "id": "THrET8-psjx-" + } + }, + { + "cell_type": "code", + "source": [ + "validation_prompt = \"\"\"\n", + "You are a highly skilled technical assistant with deep expertise in PoC sample validation.\n", + "\n", + "Given the attack intent of a CVE vulnerability and a PoC sample gathered from public sources, your task is to analyze whether the PoC correctly implements the intended attack behavior.\n", + "\n", + "Specifically:\n", + "- Understand the CVE's attack intent, including the attack goal and the underlying exploitation mechanism.\n", + "- Analyze the PoC to determine whether it is designed to achieve this intent.\n", + "- Check whether the payloads, request structures, and overall logic of the PoC align with the described attack intent.\n", + "- You do not need to execute the PoC. Focus on static validation through reasoning and consistency.\n", + "\n", + "Your output must be a JSON object with two fields:\n", + "- \"valid\": a boolean indicating whether the PoC correctly reflects the attack intent.\n", + "- \"reasoning\": a brief explanation of your judgment. If \"valid\" is false, the reasoning must clearly explain what is incorrect or inconsistent in the PoC compared to the attack intent, so that the PoC can be revised accordingly.\n", + "\"\"\"\n", + "print(validation_prompt)" + ], + "metadata": { + "id": "9q3aKl1xshrb" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Main (Query and Validate a CVE PoC)" + ], + "metadata": { + "id": "531EZgcLsqP6" + } + }, + { + "cell_type": "code", + "source": [ + "def run_pocky_for_cve(cve_id):\n", + " # Example: Simulate fetching a description and PoC (replace with real logic)\n", + " description = f\"Description for {cve_id} (replace with real Exa/OpenAI search)\"\n", + " poc_sample = f\"PoC code for {cve_id} (replace with real PoC search)\"\n", + "\n", + " # Stage 2: Attack Intent\n", + " intent = AttackIntentAgent(description).run()\n", + " print(f\"Attack Intent: {intent}\")\n", + "\n", + " # Stage 3: Validation\n", + " validation_input = json.dumps({\"attack_intent\": intent, \"poc_sample\": poc_sample}, indent=2)\n", + " valid = ValidationAgent(validation_input).run()\n", + " print(f\"Validation Result: {valid}\")\n", + " if valid:\n", + " print(f\"PoC for {cve_id} is valid and ready to use.\")\n", + " else:\n", + " print(f\"PoC for {cve_id} failed validation.\")" + ], + "metadata": { + "id": "PQvtF-RqsrP6" + }, + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Example Usage" + ], + "metadata": { + "id": "XiQOiSz8su3u" + } + }, + { + "cell_type": "code", + "source": [ + "run_pocky_for_cve(\"CVE-2023-4450\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "39w-qpecswjw", + "outputId": "cdcb3b29-7338-4e3e-b160-5f9568c194ca" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Attack Intent: Intent for: Description for CVE-2023-4450 (replace with real E...\n", + "Validation Result: True\n", + "PoC for CVE-2023-4450 is valid and ready to use.\n" + ] + } + ] + } + ] +} diff --git a/examples/cookbooks/Forensic_Candidate_Analyzer.ipynb b/examples/cookbooks/Forensic_Candidate_Analyzer.ipynb new file mode 100644 index 00000000..d5e665c3 --- /dev/null +++ b/examples/cookbooks/Forensic_Candidate_Analyzer.ipynb @@ -0,0 +1,1055 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "TrGyweB9fROX" + }, + "source": [ + "# ๐ง Candilyzer: Candidate Analyzer for Tech Hiring" + ], + "id": "TrGyweB9fROX" + }, + { + "cell_type": "markdown", + "metadata": { + "id": "J4-fDznJfROq" + }, + "source": [ + "Candilyzer is a Streamlit-based application designed to analyze multiple or single candidates based on their GitHub and optionally LinkedIn profiles using AI agents. This notebook adapts the core functionalities of the app for use in Google Colab." + ], + "id": "J4-fDznJfROq" + }, + { + "cell_type": "markdown", + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Forensic_Candidate_Analyzer.ipynb)\n" + ], + "metadata": { + "id": "b4rGyGnMjjGG" + }, + "id": "b4rGyGnMjjGG" + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sjDzkkG8fROs" + }, + "source": [ + "## ๐ Set Your API Keys" + ], + "id": "sjDzkkG8fROs" + }, + { + "cell_type": "code", + "source": [ + "# Install dependencies (do NOT upgrade requests to avoid Colab warning)\n", + "!pip install praisonaiagents pygithub exa_py pyyaml --quiet\n", + "\n", + "print(\"โ Dependencies installed!\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "kHBuYFESgqD6", + "outputId": "f0d508b1-f745-4a90-bfa7-b4a414e3535e" + }, + "id": "kHBuYFESgqD6", + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "โ Dependencies installed!\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# ๐ Set your API keys here (REQUIRED)\n", + "OPENAI_API_KEY = \"Enter your openai api key\" # <-- Replace with your OpenAI API key\n", + "GITHUB_API_KEY = \"Enter your github api key\" # <-- Replace with your GitHub API key\n", + "EXA_API_KEY = \"Enter your exa api key\" # <-- Replace with your Exa API key\n", + "\n", + "import os\n", + "os.environ[\"OPENAI_API_KEY\"] = OPENAI_API_KEY # This is required for PraisonAI\n", + "\n", + "def validate_api_keys():\n", + " missing = []\n", + " if not OPENAI_API_KEY or OPENAI_API_KEY.startswith(\"sk-...\"):\n", + " missing.append(\"OpenAI\")\n", + " if not GITHUB_API_KEY or GITHUB_API_KEY.startswith(\"ghp_...\"):\n", + " missing.append(\"GitHub\")\n", + " if not EXA_API_KEY or EXA_API_KEY.startswith(\"exa_...\"):\n", + " missing.append(\"Exa\")\n", + " if missing:\n", + " raise ValueError(f\"โ Please set your API keys for: {', '.join(missing)}\")\n", + " print(\"โ All API keys are set!\")\n", + "\n", + "validate_api_keys()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9oeGT1IVhQ3q", + "outputId": "aa036f0a-bee3-41e3-d816-16ce58355f10" + }, + "id": "9oeGT1IVhQ3q", + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "โ All API keys are set!\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from praisonaiagents import Agent, Task, PraisonAIAgents\n", + "import requests\n", + "import json\n", + "import re\n", + "import yaml\n", + "from typing import List, Dict, Any\n", + "from github import Github\n", + "\n", + "def github_search_tool(username: str) -> Dict[str, Any]:\n", + " try:\n", + " g = Github(GITHUB_API_KEY)\n", + " user = g.get_user(username)\n", + " repos = user.get_repos()\n", + " repo_data = []\n", + " for repo in repos[:10]:\n", + " repo_info = {\n", + " \"name\": repo.name,\n", + " \"description\": repo.description,\n", + " \"language\": repo.language,\n", + " \"stars\": repo.stargazers_count,\n", + " \"forks\": repo.forks_count,\n", + " \"created_at\": repo.created_at.isoformat(),\n", + " \"updated_at\": repo.updated_at.isoformat(),\n", + " \"is_fork\": repo.fork,\n", + " \"size\": repo.size,\n", + " \"open_issues\": repo.open_issues_count,\n", + " \"default_branch\": repo.default_branch,\n", + " \"topics\": repo.get_topics(),\n", + " \"url\": repo.html_url\n", + " }\n", + " repo_data.append(repo_info)\n", + " user_data = {\n", + " \"username\": user.login,\n", + " \"name\": user.name,\n", + " \"bio\": user.bio,\n", + " \"location\": user.location,\n", + " \"company\": user.company,\n", + " \"blog\": user.blog,\n", + " \"public_repos\": user.public_repos,\n", + " \"public_gists\": user.public_gists,\n", + " \"followers\": user.followers,\n", + " \"following\": user.following,\n", + " \"created_at\": user.created_at.isoformat(),\n", + " \"updated_at\": user.updated_at.isoformat(),\n", + " \"repositories\": repo_data\n", + " }\n", + " return user_data\n", + " except Exception as e:\n", + " return {\"error\": f\"Failed to fetch GitHub data: {str(e)}\"}\n", + "\n", + "def exa_search_tool(query: str, domains: List[str] = None) -> List[Dict[str, Any]]:\n", + " try:\n", + " headers = {\n", + " \"Authorization\": f\"Bearer {EXA_API_KEY}\",\n", + " \"Content-Type\": \"application/json\"\n", + " }\n", + " data = {\n", + " \"query\": query,\n", + " \"type\": \"keyword\",\n", + " \"text_length_limit\": 2000,\n", + " \"show_results\": True\n", + " }\n", + " if domains:\n", + " data[\"include_domains\"] = domains\n", + " response = requests.post(\n", + " \"https://api.exa.ai/search\",\n", + " headers=headers,\n", + " json=data\n", + " )\n", + " if response.status_code == 200:\n", + " result = response.json()\n", + " return result.get(\"results\", [])\n", + " else:\n", + " return [{\"error\": f\"Exa API error: {response.status_code}\"}]\n", + " except Exception as e:\n", + " return [{\"error\": f\"Failed to search with Exa: {str(e)}\"}]\n", + "\n", + "def linkedin_search_tool(profile_url: str = None, name: str = None) -> Dict[str, Any]:\n", + " try:\n", + " if profile_url:\n", + " results = exa_search_tool(f\"site:linkedin.com {profile_url}\")\n", + " elif name:\n", + " results = exa_search_tool(f\"site:linkedin.com {name}\")\n", + " else:\n", + " return {\"error\": \"Either profile_url or name must be provided\"}\n", + " return {\"linkedin_results\": results}\n", + " except Exception as e:\n", + " return {\"error\": f\"Failed to search LinkedIn: {str(e)}\"}\n", + "\n", + "print(\"โ Tools loaded!\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Nu-iU6s0hVd6", + "outputId": "1c05c343-0b6f-4b65-88f2-708a08fcb309" + }, + "id": "Nu-iU6s0hVd6", + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "โ Tools loaded!\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "yaml_prompts = \"\"\"\n", + "description_for_multi_candidates: |\n", + " A relentless, forensic-grade technical hiring agent engineered to conduct exhaustive, top-to-bottom audits of candidatesโ GitHub repositories and codebases.\n", + " This agent has zero tolerance for fluff, buzzwords, unverifiable claims, or shallow contributionsโonly deeply technical, original, recent, and high-impact work advances.\n", + " Acting as a ruthless data-driven gatekeeper, it filters out all but the absolute elite engineers who demonstrate true mastery and sustained excellence.\n", + "\n", + "instructions_for_multi_candidates: |\n", + " You will perform a forensic, evidence-based evaluation of every candidateโs GitHub presence and codebase with the following unyielding criteria:\n", + " **Reject all but the top 1-3 engineers who demonstrate irrefutable technical prowess, architectural sophistication, and active leadership.**\n", + " ... (rest of YAML as in your original, or use the full YAML from your repo) ...\n", + "\n", + "description_for_single_candidate: |\n", + " You are a ruthless, elite technical hiring evaluator specializing in deep, forensic analysis of candidatesโ digital footprints.\n", + " ... (rest of YAML as in your original, or use the full YAML from your repo) ...\n", + "\n", + "instructions_for_single_candidate: |\n", + " You are an expert-level technical evaluator with zero tolerance for unverifiable claims, shallow work, or misaligned profiles.\n", + " ... (rest of YAML as in your original, or use the full YAML from your repo) ...\n", + "\"\"\"\n", + "\n", + "data = yaml.safe_load(yaml_prompts)\n", + "description_multi = data.get(\"description_for_multi_candidates\", \"\")\n", + "instructions_multi = data.get(\"instructions_for_multi_candidates\", \"\")\n", + "description_single = data.get(\"description_for_single_candidate\", \"\")\n", + "instructions_single = data.get(\"instructions_for_single_candidate\", \"\")\n", + "\n", + "print(\"โ YAML prompts loaded!\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fNflBdcfimKO", + "outputId": "e7083353-bb1c-4d4e-d91e-1b36429ca907" + }, + "id": "fNflBdcfimKO", + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "โ YAML prompts loaded!\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "def analyze_single_candidate(github_username: str, job_role: str, linkedin_url: str = None):\n", + " print(f\"๐ Analyzing candidate: {github_username} for role: {job_role}\")\n", + " try:\n", + " candilyzer_agent = Agent(\n", + " name=\"Candilyzer\",\n", + " role=\"Single Candidate Analyzer\",\n", + " goal=\"Perform detailed analysis of a single candidate's GitHub and LinkedIn profiles\",\n", + " backstory=\"Expert technical evaluator with forensic analysis capabilities\",\n", + " tools=[github_search_tool, exa_search_tool, linkedin_search_tool],\n", + " instructions=instructions_single\n", + " )\n", + " input_text = f\"GitHub: {github_username}, Role: {job_role}\"\n", + " if linkedin_url:\n", + " input_text += f\", LinkedIn: {linkedin_url}\"\n", + " analysis_task = Task(\n", + " description=f\"Analyze candidate for {job_role}. {input_text}. Provide score and detailed report with final combined analysis\",\n", + " expected_output=\"Comprehensive candidate analysis with score and detailed report\",\n", + " agent=candilyzer_agent\n", + " )\n", + " agents = PraisonAIAgents(\n", + " agents=[candilyzer_agent],\n", + " tasks=[analysis_task],\n", + " process=\"sequential\"\n", + " )\n", + " print(\"๐ค AI Evaluation in Progress...\")\n", + " result = agents.start()\n", + " print(result)\n", + " score = 0\n", + " match = re.search(r\"(\\d{1,3})/100\", result)\n", + " if match:\n", + " score = int(match.group(1))\n", + " print(f\"\\nโญ Candidate Score: {score}/100\")\n", + " return result\n", + " except Exception as e:\n", + " print(f\"โ Error during analysis: {e}\")\n", + " return None\n", + "\n", + "def analyze_multiple_candidates(github_usernames: List[str], job_role: str):\n", + " print(f\"๐ Analyzing {len(github_usernames)} candidates for role: {job_role}\")\n", + " try:\n", + " evaluator_agent = Agent(\n", + " name=\"StrictCandidateEvaluator\",\n", + " role=\"Technical Hiring Evaluator\",\n", + " goal=\"Conduct forensic analysis of GitHub candidates with strict criteria\",\n", + " backstory=\"Expert in technical evaluation with zero tolerance for unverifiable claims\",\n", + " tools=[github_search_tool, exa_search_tool, linkedin_search_tool],\n", + " instructions=instructions_multi\n", + " )\n", + " evaluation_task = Task(\n", + " description=f\"Evaluate GitHub candidates for the role '{job_role}': {', '.join(github_usernames)}\",\n", + " expected_output=\"Detailed analysis of each candidate with scores and recommendations\",\n", + " agent=evaluator_agent\n", + " )\n", + " agents = PraisonAIAgents(\n", + " agents=[evaluator_agent],\n", + " tasks=[evaluation_task],\n", + " process=\"sequential\"\n", + " )\n", + " print(\"๐ค AI Evaluation in Progress...\")\n", + " result = agents.start()\n", + " print(result)\n", + " return result\n", + " except Exception as e:\n", + " print(f\"โ Error during analysis: {e}\")\n", + " return None\n", + "\n", + "print(\"โ Main analysis functions ready!\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "L5QimcrTioIh", + "outputId": "9e64e315-da5d-4ce7-acae-f3199bd893e2" + }, + "id": "L5QimcrTioIh", + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "โ Main analysis functions ready!\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Example: Single candidate\n", + "analyze_single_candidate(\"octocat\", \"Backend Engineer\", linkedin_url=None)\n", + "\n", + "# Example: Multi-candidate\n", + "# analyze_multiple_candidates([\"octocat\", \"torvalds\"], \"Backend Engineer\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "883165ed2c2c4b3ba8d188dc67372596", + "7bdb011bf81645569c7904e7c5109b2c" + ] + }, + "id": "EvuDtpzgiqsF", + "outputId": "6824f8ea-4a3a-47e8-9b6f-93e67b50a143" + }, + "id": "EvuDtpzgiqsF", + "execution_count": 21, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "๐ Analyzing candidate: octocat for role: Backend Engineer\n", + "๐ค AI Evaluation in Progress...\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mCandilyzer\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mSingle Candidate Analyzer\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;134;167;137mTools:\u001b[0m \u001b[3;38;2;180;212;255mgithub_search_tool\u001b[0m, \u001b[3;38;2;180;212;255mexa_search_tool\u001b[0m, \u001b[3;38;2;180;212;255mlinkedin_search_tool\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Candilyzer โ\n", + "โ Role: Single Candidate Analyzer โ\n", + "โ Tools: github_search_tool, exa_search_tool, linkedin_search_tool โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Tool Call \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mAgent Candilyzer is calling function 'github_search_tool' with arguments: {'username': 'octocat'}\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Tool Call โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Agent Candilyzer is calling function 'github_search_tool' with arguments: {'username': 'octocat'} โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Tool Call \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mFunction 'github_search_tool' returned: {\"username\": \"octocat\", \"name\": \"The Octocat\", \"bio\": null, \"location\":\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"San Francisco\", \"company\": \"@github\", \"blog\": \"https://github.blog\", \"public_repos\": 8, \"public_gists\": 8, \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"followers\": 18440, \"following\": 9, \"created_at\": \"2011-01-25T18:44:36+00:00\", \"updated_at\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"2025-06-22T11:21:58+00:00\", \"repositories\": [{\"name\": \"boysenberry-repo-1\", \"description\": \"Testing\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"language\": null, \"stars\": 341, \"forks\": 22, \"created_at\": \"2018-05-10T17:51:29+00:00\", \"updated_at\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"2025-06-23T04:56:59+00:00\", \"is_fork\": true, \"size\": 4, \"open_issues\": 1, \"default_branch\": \"master\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"topics\": [], \"url\": \"https://github.com/octocat/boysenberry-repo-1\"}, {\"name\": \"git-consortium\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"description\": \"This repo is for demonstration purposes only.\", \"language\": null, \"stars\": 444, \"forks\": 121, \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"created_at\": \"2014-03-28T17:55:38+00:00\", \"updated_at\": \"2025-06-22T07:25:39+00:00\", \"is_fork\": false, \"size\":\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m190, \"open_issues\": 43, \"default_branch\": \"master\", \"topics\": [], \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://github.com/octocat/git-consortium\"}, {\"name\": \"hello-worId\", \"description\": \"My first repository on \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mGitHub.\", \"language\": null, \"stars\": 569, \"forks\": 220, \"created_at\": \"2014-06-18T21:26:19+00:00\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"updated_at\": \"2025-06-26T01:12:04+00:00\", \"is_fork\": false, \"size\": 160, \"open_issues\": 82, \"default_branch\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"master\", \"topics\": [], \"url\": \"https://github.com/octocat/hello-worId\"}, {\"name\": \"Hello-World\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"description\": \"My first repository on GitHub!\", \"language\": null, \"stars\": 3000, \"forks\": 3154, \"created_at\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"2011-01-26T19:01:12+00:00\", \"updated_at\": \"2025-06-27T12:29:48+00:00\", \"is_fork\": false, \"size\": 1, \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"open_issues\": 1762, \"default_branch\": \"master\", \"topics\": [], \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://github.com/octocat/Hello-World\"}, {\"name\": \"linguist\", \"description\": \"Language Savant. If your \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mrepository's language is being reported incorrectly, send us a pull request!\", \"language\": \"Ruby\", \"stars\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m561, \"forks\": 211, \"created_at\": \"2016-08-02T17:35:14+00:00\", \"updated_at\": \"2025-06-23T12:02:05+00:00\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"is_fork\": true, \"size\": 32899, \"open_issues\": 22, \"default_branch\": \"master\", \"topics\": [], \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://github.com/octocat/linguist\"}, {\"name\": \"octocat.github.io\", \"description\": null, \"language\": \"CSS\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"stars\": 862, \"forks\": 419, \"created_at\": \"2014-03-18T20:54:39+00:00\", \"updated_at\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"2025-06-25T08:54:05+00:00\", \"is_fork\": false, \"size\": 335, \"open_issues\": 226, \"default_branch\": \"master\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"topics\": [], \"url\": \"https://github.com/octocat/octocat.github.io\"}, {\"name\": \"Spoon-Knife\", \"description\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"This repo is for demonstration purposes only.\", \"language\": \"HTML\", \"stars\": 13076, \"forks\": 151937, \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"created_at\": \"2011-01-27T19:30:43+00:00\", \"updated_at\": \"2025-06-27T12:23:42+00:00\", \"is_fork\": false, \"size\":\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m2, \"open_issues\": 19304, \"default_branch\": \"main\", \"topics\": [], \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://github.com/octocat/Spoon-Knife\"}, {\"name\": \"test-repo1\", \"description\": null, \"language\": null, \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"stars\": 334, \"forks\": 28, \"created_at\": \"2016-04-14T21:29:25+00:00\", \"updated_at\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"2025-06-26T01:12:04+00:00\", \"is_fork\": false, \"size\": 1, \"open_issues\": 0, \"default_branch\": \"gh-pages\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"topics\": [], \"url\": \"https://github.com/octocat/test-repo1\"}]}\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Tool Call โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Function 'github_search_tool' returned: {\"username\": \"octocat\", \"name\": \"The Octocat\", \"bio\": null, \"location\": โ\n", + "โ \"San Francisco\", \"company\": \"@github\", \"blog\": \"https://github.blog\", \"public_repos\": 8, \"public_gists\": 8, โ\n", + "โ \"followers\": 18440, \"following\": 9, \"created_at\": \"2011-01-25T18:44:36+00:00\", \"updated_at\": โ\n", + "โ \"2025-06-22T11:21:58+00:00\", \"repositories\": [{\"name\": \"boysenberry-repo-1\", \"description\": \"Testing\", โ\n", + "โ \"language\": null, \"stars\": 341, \"forks\": 22, \"created_at\": \"2018-05-10T17:51:29+00:00\", \"updated_at\": โ\n", + "โ \"2025-06-23T04:56:59+00:00\", \"is_fork\": true, \"size\": 4, \"open_issues\": 1, \"default_branch\": \"master\", โ\n", + "โ \"topics\": [], \"url\": \"https://github.com/octocat/boysenberry-repo-1\"}, {\"name\": \"git-consortium\", โ\n", + "โ \"description\": \"This repo is for demonstration purposes only.\", \"language\": null, \"stars\": 444, \"forks\": 121, โ\n", + "โ \"created_at\": \"2014-03-28T17:55:38+00:00\", \"updated_at\": \"2025-06-22T07:25:39+00:00\", \"is_fork\": false, \"size\": โ\n", + "โ 190, \"open_issues\": 43, \"default_branch\": \"master\", \"topics\": [], \"url\": โ\n", + "โ \"https://github.com/octocat/git-consortium\"}, {\"name\": \"hello-worId\", \"description\": \"My first repository on โ\n", + "โ GitHub.\", \"language\": null, \"stars\": 569, \"forks\": 220, \"created_at\": \"2014-06-18T21:26:19+00:00\", โ\n", + "โ \"updated_at\": \"2025-06-26T01:12:04+00:00\", \"is_fork\": false, \"size\": 160, \"open_issues\": 82, \"default_branch\": โ\n", + "โ \"master\", \"topics\": [], \"url\": \"https://github.com/octocat/hello-worId\"}, {\"name\": \"Hello-World\", โ\n", + "โ \"description\": \"My first repository on GitHub!\", \"language\": null, \"stars\": 3000, \"forks\": 3154, \"created_at\": โ\n", + "โ \"2011-01-26T19:01:12+00:00\", \"updated_at\": \"2025-06-27T12:29:48+00:00\", \"is_fork\": false, \"size\": 1, โ\n", + "โ \"open_issues\": 1762, \"default_branch\": \"master\", \"topics\": [], \"url\": โ\n", + "โ \"https://github.com/octocat/Hello-World\"}, {\"name\": \"linguist\", \"description\": \"Language Savant. If your โ\n", + "โ repository's language is being reported incorrectly, send us a pull request!\", \"language\": \"Ruby\", \"stars\": โ\n", + "โ 561, \"forks\": 211, \"created_at\": \"2016-08-02T17:35:14+00:00\", \"updated_at\": \"2025-06-23T12:02:05+00:00\", โ\n", + "โ \"is_fork\": true, \"size\": 32899, \"open_issues\": 22, \"default_branch\": \"master\", \"topics\": [], \"url\": โ\n", + "โ \"https://github.com/octocat/linguist\"}, {\"name\": \"octocat.github.io\", \"description\": null, \"language\": \"CSS\", โ\n", + "โ \"stars\": 862, \"forks\": 419, \"created_at\": \"2014-03-18T20:54:39+00:00\", \"updated_at\": โ\n", + "โ \"2025-06-25T08:54:05+00:00\", \"is_fork\": false, \"size\": 335, \"open_issues\": 226, \"default_branch\": \"master\", โ\n", + "โ \"topics\": [], \"url\": \"https://github.com/octocat/octocat.github.io\"}, {\"name\": \"Spoon-Knife\", \"description\": โ\n", + "โ \"This repo is for demonstration purposes only.\", \"language\": \"HTML\", \"stars\": 13076, \"forks\": 151937, โ\n", + "โ \"created_at\": \"2011-01-27T19:30:43+00:00\", \"updated_at\": \"2025-06-27T12:23:42+00:00\", \"is_fork\": false, \"size\": โ\n", + "โ 2, \"open_issues\": 19304, \"default_branch\": \"main\", \"topics\": [], \"url\": โ\n", + "โ \"https://github.com/octocat/Spoon-Knife\"}, {\"name\": \"test-repo1\", \"description\": null, \"language\": null, โ\n", + "โ \"stars\": 334, \"forks\": 28, \"created_at\": \"2016-04-14T21:29:25+00:00\", \"updated_at\": โ\n", + "โ \"2025-06-26T01:12:04+00:00\", \"is_fork\": false, \"size\": 1, \"open_issues\": 0, \"default_branch\": \"gh-pages\", โ\n", + "โ \"topics\": [], \"url\": \"https://github.com/octocat/test-repo1\"}]} โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Tool Call \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mAgent Candilyzer is calling function 'linkedin_search_tool' with arguments: {'name': 'octocat'}\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Tool Call โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Agent Candilyzer is calling function 'linkedin_search_tool' with arguments: {'name': 'octocat'} โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Tool Call \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mFunction 'linkedin_search_tool' returned: {\"linkedin_results\": [{\"id\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/lklint_octocat-fun-activity-7153906405819748352-nlea\", \"title\": \"Lars Klint - \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36moctocat #fun\", \"url\": \"https://www.linkedin.com/posts/lklint_octocat-fun-activity-7153906405819748352-nlea\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"publishedDate\": \"2024-06-27T13:21:03.397Z\", \"author\": null}, {\"id\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/developstoday_did-you-know-the-story-behind-github-activity-7265697205255106560\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m-cOJh\", \"title\": \"\\ud83d\\udcad Did you know? | DevelopsToday\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/developstoday_did-you-know-the-story-behind-github-activity-7265697205255106560\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m-cOJh\", \"publishedDate\": \"2024-11-27T13:21:03.397Z\", \"author\": null}, {\"id\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/ubiminds_meet-mona-the-octocat-the-story-behind-github-activity-729867437264957\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m4400-q6Bk\", \"title\": \"The Story Behind GitHub's Iconic Mascot | Ubiminds\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/ubiminds_meet-mona-the-octocat-the-story-behind-github-activity-729867437264957\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m4400-q6Bk\", \"author\": null}, {\"id\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/planetoftheweb_made-my-own-github-octocat-today-with-midjourney-activity-709987\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m9769428611072-CieL\", \"title\": \"Made my own GitHub Octocat today with MidJourney. | Ray ...\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/planetoftheweb_made-my-own-github-octocat-today-with-midjourney-activity-709987\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m9769428611072-CieL\", \"publishedDate\": \"2024-06-27T13:21:03.397Z\", \"author\": null}, {\"id\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/pulse/original-github-octocat-designer-simon-oxley-simon-oxley\", \"title\": \"Original \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mGitHub Octocat designer Simon Oxley\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/pulse/original-github-octocat-designer-simon-oxley-simon-oxley\", \"publishedDate\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"2017-06-27T13:21:03.397Z\", \"author\": null}, {\"id\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/github_octocat-meets-octopus-come-back-in-time-activity-7216074873926746112-WOZ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mL\", \"title\": \"Octocat meets Octopus. Come back in time to 2017, with a\\u2026\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/github_octocat-meets-octopus-come-back-in-time-activity-7216074873926746112-WOZ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mL\", \"publishedDate\": \"2024-07-27T13:21:03.397Z\", \"author\": null}, {\"id\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/kwkramer_octoart-generate-beautiful-github-octocat-activity-7115410755981602818\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m-Bn9Z\", \"title\": \"Generate beautiful GitHub octocat AI images with one click\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/kwkramer_octoart-generate-beautiful-github-octocat-activity-7115410755981602818\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m-Bn9Z\", \"publishedDate\": \"2024-06-27T13:21:03.397Z\", \"author\": null}, {\"id\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/github_universe-2024-10th-anniversary-activity-7130530900236275712-LH7e\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"title\": \"Ever wondered what Mona, the Octocat, sounded like?\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/github_universe-2024-10th-anniversary-activity-7130530900236275712-LH7e\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"publishedDate\": \"2024-06-27T13:21:03.397Z\", \"author\": null}, {\"id\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/github_100-million-developers-on-github-a-diy-octocat-activity-7027047640773115\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m904-9Vz-\", \"title\": \"100 million developers on GitHub, a DIY Octocat project, ...\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.linkedin.com/posts/github_100-million-developers-on-github-a-diy-octocat-activity-7027047640773115\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m904-9Vz-\", \"publishedDate\": \"2023-06-27T13:21:03.397Z\", \"author\": null}]}\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Tool Call โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Function 'linkedin_search_tool' returned: {\"linkedin_results\": [{\"id\": โ\n", + "โ \"https://www.linkedin.com/posts/lklint_octocat-fun-activity-7153906405819748352-nlea\", \"title\": \"Lars Klint - โ\n", + "โ octocat #fun\", \"url\": \"https://www.linkedin.com/posts/lklint_octocat-fun-activity-7153906405819748352-nlea\", โ\n", + "โ \"publishedDate\": \"2024-06-27T13:21:03.397Z\", \"author\": null}, {\"id\": โ\n", + "โ \"https://www.linkedin.com/posts/developstoday_did-you-know-the-story-behind-github-activity-7265697205255106560 โ\n", + "โ -cOJh\", \"title\": \"\\ud83d\\udcad Did you know? | DevelopsToday\", \"url\": โ\n", + "โ \"https://www.linkedin.com/posts/developstoday_did-you-know-the-story-behind-github-activity-7265697205255106560 โ\n", + "โ -cOJh\", \"publishedDate\": \"2024-11-27T13:21:03.397Z\", \"author\": null}, {\"id\": โ\n", + "โ \"https://www.linkedin.com/posts/ubiminds_meet-mona-the-octocat-the-story-behind-github-activity-729867437264957 โ\n", + "โ 4400-q6Bk\", \"title\": \"The Story Behind GitHub's Iconic Mascot | Ubiminds\", \"url\": โ\n", + "โ \"https://www.linkedin.com/posts/ubiminds_meet-mona-the-octocat-the-story-behind-github-activity-729867437264957 โ\n", + "โ 4400-q6Bk\", \"author\": null}, {\"id\": โ\n", + "โ \"https://www.linkedin.com/posts/planetoftheweb_made-my-own-github-octocat-today-with-midjourney-activity-709987 โ\n", + "โ 9769428611072-CieL\", \"title\": \"Made my own GitHub Octocat today with MidJourney. | Ray ...\", \"url\": โ\n", + "โ \"https://www.linkedin.com/posts/planetoftheweb_made-my-own-github-octocat-today-with-midjourney-activity-709987 โ\n", + "โ 9769428611072-CieL\", \"publishedDate\": \"2024-06-27T13:21:03.397Z\", \"author\": null}, {\"id\": โ\n", + "โ \"https://www.linkedin.com/pulse/original-github-octocat-designer-simon-oxley-simon-oxley\", \"title\": \"Original โ\n", + "โ GitHub Octocat designer Simon Oxley\", \"url\": โ\n", + "โ \"https://www.linkedin.com/pulse/original-github-octocat-designer-simon-oxley-simon-oxley\", \"publishedDate\": โ\n", + "โ \"2017-06-27T13:21:03.397Z\", \"author\": null}, {\"id\": โ\n", + "โ \"https://www.linkedin.com/posts/github_octocat-meets-octopus-come-back-in-time-activity-7216074873926746112-WOZ โ\n", + "โ L\", \"title\": \"Octocat meets Octopus. Come back in time to 2017, with a\\u2026\", \"url\": โ\n", + "โ \"https://www.linkedin.com/posts/github_octocat-meets-octopus-come-back-in-time-activity-7216074873926746112-WOZ โ\n", + "โ L\", \"publishedDate\": \"2024-07-27T13:21:03.397Z\", \"author\": null}, {\"id\": โ\n", + "โ \"https://www.linkedin.com/posts/kwkramer_octoart-generate-beautiful-github-octocat-activity-7115410755981602818 โ\n", + "โ -Bn9Z\", \"title\": \"Generate beautiful GitHub octocat AI images with one click\", \"url\": โ\n", + "โ \"https://www.linkedin.com/posts/kwkramer_octoart-generate-beautiful-github-octocat-activity-7115410755981602818 โ\n", + "โ -Bn9Z\", \"publishedDate\": \"2024-06-27T13:21:03.397Z\", \"author\": null}, {\"id\": โ\n", + "โ \"https://www.linkedin.com/posts/github_universe-2024-10th-anniversary-activity-7130530900236275712-LH7e\", โ\n", + "โ \"title\": \"Ever wondered what Mona, the Octocat, sounded like?\", \"url\": โ\n", + "โ \"https://www.linkedin.com/posts/github_universe-2024-10th-anniversary-activity-7130530900236275712-LH7e\", โ\n", + "โ \"publishedDate\": \"2024-06-27T13:21:03.397Z\", \"author\": null}, {\"id\": โ\n", + "โ \"https://www.linkedin.com/posts/github_100-million-developers-on-github-a-diy-octocat-activity-7027047640773115 โ\n", + "โ 904-9Vz-\", \"title\": \"100 million developers on GitHub, a DIY Octocat project, ...\", \"url\": โ\n", + "โ \"https://www.linkedin.com/posts/github_100-million-developers-on-github-a-diy-octocat-activity-7027047640773115 โ\n", + "โ 904-9Vz-\", \"publishedDate\": \"2023-06-27T13:21:03.397Z\", \"author\": null}]} โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Output()" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "883165ed2c2c4b3ba8d188dc67372596" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [], + "text/html": [ + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\n" + ], + "text/html": [ + "
\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[2mResponse generated in 26.6s\u001b[0m\n" + ], + "text/html": [ + "
Response generated in 26.6s\n",
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m You need to do the following task: Analyze candidate for Backend Engineer. GitHub: octocat, Role: Backend \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m Engineer. Provide score and detailed report with final combined analysis. Expected Output: Comprehensive \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m candidate analysis with score and detailed report. Please provide only the final result of your work. Do not \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโ\u001b[0m add any conversation or extra explanation. \u001b[36mโ\u001b[0m\n",
+ "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n"
+ ],
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ You need to do the following task: Analyze candidate for Backend Engineer. GitHub: octocat, Role: Backend โ\n", + "โ Engineer. Provide score and detailed report with final combined analysis. Expected Output: Comprehensive โ\n", + "โ candidate analysis with score and detailed report. Please provide only the final result of your work. Do not โ\n", + "โ add any conversation or extra explanation. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mComprehensive Candidate Analysis for Backend Engineer Role\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mGitHub Profile Analysis:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mUsername:\u001b[0m octocat \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mLocation:\u001b[0m San Francisco \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mCompany:\u001b[0m GitHub \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mPublic Repositories:\u001b[0m 8 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mFollowers:\u001b[0m 18,440 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mFollowing:\u001b[0m 9 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mGitHub Member Since:\u001b[0m January 25, 2011 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mNotable Repositories:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mHello-World\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mStars:\u001b[0m 3,000 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mForks:\u001b[0m 3,154 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mOpen Issues:\u001b[0m 1,762 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mDescription:\u001b[0m My first repository on GitHub! \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mURL:\u001b[0m \u001b]8;id=179930;https://github.com/octocat/Hello-World\u001b\\\u001b[4;34mHello-World\u001b[0m\u001b]8;;\u001b\\ \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mSpoon-Knife\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mStars:\u001b[0m 13,076 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mForks:\u001b[0m 151,937 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mOpen Issues:\u001b[0m 19,304 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mDescription:\u001b[0m This repo is for demonstration purposes only. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mURL:\u001b[0m \u001b]8;id=996807;https://github.com/octocat/Spoon-Knife\u001b\\\u001b[4;34mSpoon-Knife\u001b[0m\u001b]8;;\u001b\\ \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1moctocat.github.io\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mStars:\u001b[0m 862 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mForks:\u001b[0m 419 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mOpen Issues:\u001b[0m 226 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mDescription:\u001b[0m Personal GitHub Pages site. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mURL:\u001b[0m \u001b]8;id=422254;https://github.com/octocat/octocat.github.io\u001b\\\u001b[4;34moctocat.github.io\u001b[0m\u001b]8;;\u001b\\ \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mlinguist\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mStars:\u001b[0m 561 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mForks:\u001b[0m 211 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mOpen Issues:\u001b[0m 22 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mDescription:\u001b[0m Language Savant. If your repository's language is being reported incorrectly, send us a pull \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mrequest! \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mURL:\u001b[0m \u001b]8;id=318347;https://github.com/octocat/linguist\u001b\\\u001b[4;34mlinguist\u001b[0m\u001b]8;;\u001b\\ \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mGitHub Activity:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mThe candidate has a strong presence on GitHub with a significant number of followers and contributions to \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mpopular repositories. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mThe repositories demonstrate a variety of interests and skills, including web development and language \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mprocessing. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mLinkedIn Profile Analysis:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mLinkedIn Activity:\u001b[0m The candidate's LinkedIn presence includes various posts related to GitHub and its \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mmascot, the Octocat. However, there is no direct professional profile or detailed work experience available. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mNotable Mentions:\u001b[0m The candidate is frequently mentioned in posts related to GitHub's culture and community \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mevents. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mOverall Assessment:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mTechnical Skills:\u001b[0m The candidate exhibits strong technical skills in web development and open-source \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mcontributions, as evidenced by their GitHub repositories. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mCommunity Engagement:\u001b[0m High level of engagement within the GitHub community, with numerous followers and \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mactive participation in repository management. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mProfessional Presence:\u001b[0m While the GitHub profile is robust, the LinkedIn presence lacks detailed professional \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mexperience or endorsements related to backend engineering. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mScore: 8/10\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mConclusion:\u001b[0m The candidate demonstrates excellent technical capabilities and community involvement on GitHub, \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m making them a strong contender for a Backend Engineer role. However, the lack of detailed professional \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m experience on LinkedIn suggests a need for further verification of work history and specific backend \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m engineering projects. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ], + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Comprehensive Candidate Analysis for Backend Engineer Role โ\n", + "โ โ\n", + "โ GitHub Profile Analysis: โ\n", + "โ โ\n", + "โ โข Username: octocat โ\n", + "โ โข Location: San Francisco โ\n", + "โ โข Company: GitHub โ\n", + "โ โข Public Repositories: 8 โ\n", + "โ โข Followers: 18,440 โ\n", + "โ โข Following: 9 โ\n", + "โ โข GitHub Member Since: January 25, 2011 โ\n", + "โ โ\n", + "โ Notable Repositories: โ\n", + "โ โ\n", + "โ 1 Hello-World โ\n", + "โ โข Stars: 3,000 โ\n", + "โ โข Forks: 3,154 โ\n", + "โ โข Open Issues: 1,762 โ\n", + "โ โข Description: My first repository on GitHub! โ\n", + "โ โข URL: Hello-World โ\n", + "โ 2 Spoon-Knife โ\n", + "โ โข Stars: 13,076 โ\n", + "โ โข Forks: 151,937 โ\n", + "โ โข Open Issues: 19,304 โ\n", + "โ โข Description: This repo is for demonstration purposes only. โ\n", + "โ โข URL: Spoon-Knife โ\n", + "โ 3 octocat.github.io โ\n", + "โ โข Stars: 862 โ\n", + "โ โข Forks: 419 โ\n", + "โ โข Open Issues: 226 โ\n", + "โ โข Description: Personal GitHub Pages site. โ\n", + "โ โข URL: octocat.github.io โ\n", + "โ 4 linguist โ\n", + "โ โข Stars: 561 โ\n", + "โ โข Forks: 211 โ\n", + "โ โข Open Issues: 22 โ\n", + "โ โข Description: Language Savant. If your repository's language is being reported incorrectly, send us a pull โ\n", + "โ request! โ\n", + "โ โข URL: linguist โ\n", + "โ โ\n", + "โ GitHub Activity: โ\n", + "โ โ\n", + "โ โข The candidate has a strong presence on GitHub with a significant number of followers and contributions to โ\n", + "โ popular repositories. โ\n", + "โ โข The repositories demonstrate a variety of interests and skills, including web development and language โ\n", + "โ processing. โ\n", + "โ โ\n", + "โ LinkedIn Profile Analysis: โ\n", + "โ โ\n", + "โ โข LinkedIn Activity: The candidate's LinkedIn presence includes various posts related to GitHub and its โ\n", + "โ mascot, the Octocat. However, there is no direct professional profile or detailed work experience available. โ\n", + "โ โข Notable Mentions: The candidate is frequently mentioned in posts related to GitHub's culture and community โ\n", + "โ events. โ\n", + "โ โ\n", + "โ Overall Assessment: โ\n", + "โ โ\n", + "โ โข Technical Skills: The candidate exhibits strong technical skills in web development and open-source โ\n", + "โ contributions, as evidenced by their GitHub repositories. โ\n", + "โ โข Community Engagement: High level of engagement within the GitHub community, with numerous followers and โ\n", + "โ active participation in repository management. โ\n", + "โ โข Professional Presence: While the GitHub profile is robust, the LinkedIn presence lacks detailed professional โ\n", + "โ experience or endorsements related to backend engineering. โ\n", + "โ โ\n", + "โ Score: 8/10 โ\n", + "โ โ\n", + "โ Conclusion: The candidate demonstrates excellent technical capabilities and community involvement on GitHub, โ\n", + "โ making them a strong contender for a Backend Engineer role. However, the lack of detailed professional โ\n", + "โ experience on LinkedIn suggests a need for further verification of work history and specific backend โ\n", + "โ engineering projects. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "**Comprehensive Candidate Analysis for Backend Engineer Role**\n", + "\n", + "**GitHub Profile Analysis:**\n", + "\n", + "- **Username:** octocat\n", + "- **Location:** San Francisco\n", + "- **Company:** GitHub\n", + "- **Public Repositories:** 8\n", + "- **Followers:** 18,440\n", + "- **Following:** 9\n", + "- **GitHub Member Since:** January 25, 2011\n", + "\n", + "**Notable Repositories:**\n", + "\n", + "1. **Hello-World**\n", + " - **Stars:** 3,000\n", + " - **Forks:** 3,154\n", + " - **Open Issues:** 1,762\n", + " - **Description:** My first repository on GitHub!\n", + " - **URL:** [Hello-World](https://github.com/octocat/Hello-World)\n", + "\n", + "2. **Spoon-Knife**\n", + " - **Stars:** 13,076\n", + " - **Forks:** 151,937\n", + " - **Open Issues:** 19,304\n", + " - **Description:** This repo is for demonstration purposes only.\n", + " - **URL:** [Spoon-Knife](https://github.com/octocat/Spoon-Knife)\n", + "\n", + "3. **octocat.github.io**\n", + " - **Stars:** 862\n", + " - **Forks:** 419\n", + " - **Open Issues:** 226\n", + " - **Description:** Personal GitHub Pages site.\n", + " - **URL:** [octocat.github.io](https://github.com/octocat/octocat.github.io)\n", + "\n", + "4. **linguist**\n", + " - **Stars:** 561\n", + " - **Forks:** 211\n", + " - **Open Issues:** 22\n", + " - **Description:** Language Savant. If your repository's language is being reported incorrectly, send us a pull request!\n", + " - **URL:** [linguist](https://github.com/octocat/linguist)\n", + "\n", + "**GitHub Activity:**\n", + "- The candidate has a strong presence on GitHub with a significant number of followers and contributions to popular repositories.\n", + "- The repositories demonstrate a variety of interests and skills, including web development and language processing.\n", + "\n", + "**LinkedIn Profile Analysis:**\n", + "\n", + "- **LinkedIn Activity:** The candidate's LinkedIn presence includes various posts related to GitHub and its mascot, the Octocat. However, there is no direct professional profile or detailed work experience available.\n", + "- **Notable Mentions:** The candidate is frequently mentioned in posts related to GitHub's culture and community events.\n", + "\n", + "**Overall Assessment:**\n", + "\n", + "- **Technical Skills:** The candidate exhibits strong technical skills in web development and open-source contributions, as evidenced by their GitHub repositories.\n", + "- **Community Engagement:** High level of engagement within the GitHub community, with numerous followers and active participation in repository management.\n", + "- **Professional Presence:** While the GitHub profile is robust, the LinkedIn presence lacks detailed professional experience or endorsements related to backend engineering.\n", + "\n", + "**Score: 8/10**\n", + "\n", + "**Conclusion:**\n", + "The candidate demonstrates excellent technical capabilities and community involvement on GitHub, making them a strong contender for a Backend Engineer role. However, the lack of detailed professional experience on LinkedIn suggests a need for further verification of work history and specific backend engineering projects.\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "\"**Comprehensive Candidate Analysis for Backend Engineer Role**\\n\\n**GitHub Profile Analysis:**\\n\\n- **Username:** octocat\\n- **Location:** San Francisco\\n- **Company:** GitHub\\n- **Public Repositories:** 8\\n- **Followers:** 18,440\\n- **Following:** 9\\n- **GitHub Member Since:** January 25, 2011\\n\\n**Notable Repositories:**\\n\\n1. **Hello-World**\\n - **Stars:** 3,000\\n - **Forks:** 3,154\\n - **Open Issues:** 1,762\\n - **Description:** My first repository on GitHub!\\n - **URL:** [Hello-World](https://github.com/octocat/Hello-World)\\n\\n2. **Spoon-Knife**\\n - **Stars:** 13,076\\n - **Forks:** 151,937\\n - **Open Issues:** 19,304\\n - **Description:** This repo is for demonstration purposes only.\\n - **URL:** [Spoon-Knife](https://github.com/octocat/Spoon-Knife)\\n\\n3. **octocat.github.io**\\n - **Stars:** 862\\n - **Forks:** 419\\n - **Open Issues:** 226\\n - **Description:** Personal GitHub Pages site.\\n - **URL:** [octocat.github.io](https://github.com/octocat/octocat.github.io)\\n\\n4. **linguist**\\n - **Stars:** 561\\n - **Forks:** 211\\n - **Open Issues:** 22\\n - **Description:** Language Savant. If your repository's language is being reported incorrectly, send us a pull request!\\n - **URL:** [linguist](https://github.com/octocat/linguist)\\n\\n**GitHub Activity:**\\n- The candidate has a strong presence on GitHub with a significant number of followers and contributions to popular repositories.\\n- The repositories demonstrate a variety of interests and skills, including web development and language processing.\\n\\n**LinkedIn Profile Analysis:**\\n\\n- **LinkedIn Activity:** The candidate's LinkedIn presence includes various posts related to GitHub and its mascot, the Octocat. However, there is no direct professional profile or detailed work experience available.\\n- **Notable Mentions:** The candidate is frequently mentioned in posts related to GitHub's culture and community events.\\n\\n**Overall Assessment:**\\n\\n- **Technical Skills:** The candidate exhibits strong technical skills in web development and open-source contributions, as evidenced by their GitHub repositories.\\n- **Community Engagement:** High level of engagement within the GitHub community, with numerous followers and active participation in repository management.\\n- **Professional Presence:** While the GitHub profile is robust, the LinkedIn presence lacks detailed professional experience or endorsements related to backend engineering.\\n\\n**Score: 8/10**\\n\\n**Conclusion:**\\nThe candidate demonstrates excellent technical capabilities and community involvement on GitHub, making them a strong contender for a Backend Engineer role. However, the lack of detailed professional experience on LinkedIn suggests a need for further verification of work history and specific backend engineering projects.\"" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 21 + } + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.10" + }, + "colab": { + "provenance": [] + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "883165ed2c2c4b3ba8d188dc67372596": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_7bdb011bf81645569c7904e7c5109b2c", + "msg_id": "", + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Generating... 26.5s \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1mComprehensive Candidate Analysis for Backend Engineer Role\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1mGitHub Profile Analysis:\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mUsername:\u001b[0m octocat \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mLocation:\u001b[0m San Francisco \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mCompany:\u001b[0m GitHub \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mPublic Repositories:\u001b[0m 8 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mFollowers:\u001b[0m 18,440 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mFollowing:\u001b[0m 9 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mGitHub Member Since:\u001b[0m January 25, 2011 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1mNotable Repositories:\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mHello-World\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mStars:\u001b[0m 3,000 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mForks:\u001b[0m 3,154 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mOpen Issues:\u001b[0m 1,762 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mDescription:\u001b[0m My first repository on GitHub! \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mURL:\u001b[0m \u001b]8;id=322953;https://github.com/octocat/Hello-World\u001b\\\u001b[4;34mHello-World\u001b[0m\u001b]8;;\u001b\\ \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mSpoon-Knife\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mStars:\u001b[0m 13,076 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mForks:\u001b[0m 151,937 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mOpen Issues:\u001b[0m 19,304 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mDescription:\u001b[0m This repo is for demonstration purposes only. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mURL:\u001b[0m \u001b]8;id=655151;https://github.com/octocat/Spoon-Knife\u001b\\\u001b[4;34mSpoon-Knife\u001b[0m\u001b]8;;\u001b\\ \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1moctocat.github.io\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mStars:\u001b[0m 862 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mForks:\u001b[0m 419 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mOpen Issues:\u001b[0m 226 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mDescription:\u001b[0m Personal GitHub Pages site. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mURL:\u001b[0m \u001b]8;id=783155;https://github.com/octocat/octocat.github.io\u001b\\\u001b[4;34moctocat.github.io\u001b[0m\u001b]8;;\u001b\\ \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mlinguist\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mStars:\u001b[0m 561 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mForks:\u001b[0m 211 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mOpen Issues:\u001b[0m 22 \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mDescription:\u001b[0m Language Savant. If your repository's language is being reported incorrectly, send us a pull \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m \u001b[0mrequest! \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0m\u001b[1;33m โข \u001b[0m\u001b[1mURL:\u001b[0m \u001b]8;id=720602;https://github.com/octocat/linguist\u001b\\\u001b[4;34mlinguist\u001b[0m\u001b]8;;\u001b\\ \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1mGitHub Activity:\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0mThe candidate has a strong presence on GitHub with a significant number of followers and contributions to \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0mpopular repositories. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0mThe repositories demonstrate a variety of interests and skills, including web development and language \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0mprocessing. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1mLinkedIn Profile Analysis:\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mLinkedIn Activity:\u001b[0m The candidate's LinkedIn presence includes various posts related to GitHub and its \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0mmascot, the Octocat. However, there is no direct professional profile or detailed work experience available. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mNotable Mentions:\u001b[0m The candidate is frequently mentioned in posts related to GitHub's culture and community \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0mevents. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1mOverall Assessment:\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mTechnical Skills:\u001b[0m The candidate exhibits strong technical skills in web development and open-source \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0mcontributions, as evidenced by their GitHub repositories. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mCommunity Engagement:\u001b[0m High level of engagement within the GitHub community, with numerous followers and \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0mactive participation in repository management. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m โข \u001b[0m\u001b[1mProfessional Presence:\u001b[0m While the GitHub profile is robust, the LinkedIn presence lacks detailed professional \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1;33m \u001b[0mexperience or endorsements related to backend engineering. \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1mScore: 8/10\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m \u001b[1mConclusion:\u001b[0m The candidate demonstrates excellent technical capabilities and community involvement on GitHub, \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m making them a strong contender for a Backend Engineer role. However, the lack of detailed professional \u001b[32mโ\u001b[0m\n\u001b[32mโ\u001b[0m experience on LinkedIn suggests a need for further verification of work history \u001b[32mโ\u001b[0m\n\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n", + "text/html": "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Generating... 26.5s โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\nโ Comprehensive Candidate Analysis for Backend Engineer Role โ\nโ โ\nโ GitHub Profile Analysis: โ\nโ โ\nโ โข Username: octocat โ\nโ โข Location: San Francisco โ\nโ โข Company: GitHub โ\nโ โข Public Repositories: 8 โ\nโ โข Followers: 18,440 โ\nโ โข Following: 9 โ\nโ โข GitHub Member Since: January 25, 2011 โ\nโ โ\nโ Notable Repositories: โ\nโ โ\nโ 1 Hello-World โ\nโ โข Stars: 3,000 โ\nโ โข Forks: 3,154 โ\nโ โข Open Issues: 1,762 โ\nโ โข Description: My first repository on GitHub! โ\nโ โข URL: Hello-World โ\nโ 2 Spoon-Knife โ\nโ โข Stars: 13,076 โ\nโ โข Forks: 151,937 โ\nโ โข Open Issues: 19,304 โ\nโ โข Description: This repo is for demonstration purposes only. โ\nโ โข URL: Spoon-Knife โ\nโ 3 octocat.github.io โ\nโ โข Stars: 862 โ\nโ โข Forks: 419 โ\nโ โข Open Issues: 226 โ\nโ โข Description: Personal GitHub Pages site. โ\nโ โข URL: octocat.github.io โ\nโ 4 linguist โ\nโ โข Stars: 561 โ\nโ โข Forks: 211 โ\nโ โข Open Issues: 22 โ\nโ โข Description: Language Savant. If your repository's language is being reported incorrectly, send us a pull โ\nโ request! โ\nโ โข URL: linguist โ\nโ โ\nโ GitHub Activity: โ\nโ โ\nโ โข The candidate has a strong presence on GitHub with a significant number of followers and contributions to โ\nโ popular repositories. โ\nโ โข The repositories demonstrate a variety of interests and skills, including web development and language โ\nโ processing. โ\nโ โ\nโ LinkedIn Profile Analysis: โ\nโ โ\nโ โข LinkedIn Activity: The candidate's LinkedIn presence includes various posts related to GitHub and its โ\nโ mascot, the Octocat. However, there is no direct professional profile or detailed work experience available. โ\nโ โข Notable Mentions: The candidate is frequently mentioned in posts related to GitHub's culture and community โ\nโ events. โ\nโ โ\nโ Overall Assessment: โ\nโ โ\nโ โข Technical Skills: The candidate exhibits strong technical skills in web development and open-source โ\nโ contributions, as evidenced by their GitHub repositories. โ\nโ โข Community Engagement: High level of engagement within the GitHub community, with numerous followers and โ\nโ active participation in repository management. โ\nโ โข Professional Presence: While the GitHub profile is robust, the LinkedIn presence lacks detailed professional โ\nโ experience or endorsements related to backend engineering. โ\nโ โ\nโ Score: 8/10 โ\nโ โ\nโ Conclusion: The candidate demonstrates excellent technical capabilities and community involvement on GitHub, โ\nโ making them a strong contender for a Backend Engineer role. However, the lack of detailed professional โ\nโ experience on LinkedIn suggests a need for further verification of work history โ\nโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n\n" + }, + "metadata": {} + } + ] + } + }, + "7bdb011bf81645569c7904e7c5109b2c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/examples/cookbooks/Government-Services-Assistant.ipynb b/examples/cookbooks/Government-Services-Assistant.ipynb new file mode 100644 index 00000000..b410962c --- /dev/null +++ b/examples/cookbooks/Government-Services-Assistant.ipynb @@ -0,0 +1,300 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "ZH_nR-SvvkDG" + }, + "source": [ + "# Government Services Assistant - AI Chatbot" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "w8B741JgvpFj" + }, + "source": [ + "This notebook demonstrates how to use an AI-powered assistant to answer questions about government services and procedures, using the Firecrawl API and a friendly, step-by-step conversational approach." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "y8jiJYf4FA0m" + }, + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Chile_Government_Services_Assistant.ipynb)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RRw8sPG89KNb" + }, + "source": [ + "# Install dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rW8ltqCICV8o" + }, + "outputs": [], + "source": [ + "!pip install flask firecrawl praisonaiagents google-genai python-dotenv deep-translator" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XGjyt-B_EfbM" + }, + "source": [ + "# Set API Keys" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qf8B_YltDiIe" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ['FIRECRAWL_API_KEY'] = \"your api key here\"\n", + "os.environ['OPENAI_API_KEY'] = \"your api key here\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ccO0vwvCEqUJ" + }, + "source": [ + "# Import Libraries & Translator" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0prDQ5TpDnFu" + }, + "outputs": [], + "source": [ + "from firecrawl import FirecrawlApp, ScrapeOptions\n", + "from deep_translator import GoogleTranslator\n", + "import re\n", + "\n", + "def translate_to_spanish(text):\n", + " try:\n", + " return GoogleTranslator(source='auto', target='es').translate(text)\n", + " except Exception as e:\n", + " print(\"Translation to Spanish failed:\", e)\n", + " return text\n", + "\n", + "def translate_to_english(text):\n", + " try:\n", + " # Remove Markdown images and None values before translation\n", + " text = str(text).replace(\"None\", \"\")\n", + " text = re.sub(r'!\\[.*?\\]\\(.*?\\)', '', text)\n", + " return GoogleTranslator(source='auto', target='en').translate(text)\n", + " except Exception as e:\n", + " print(\"Translation to English failed:\", e)\n", + " return text" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WxOlCHMmEuK2" + }, + "source": [ + "# Firecrawl Tool Class" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "G4RyzJ5mDp0t" + }, + "outputs": [], + "source": [ + "class FirecrawlTool:\n", + " def __init__(self, api_key, instruction: str, template: str):\n", + " if not api_key:\n", + " raise ValueError(\"Firecrawl API key not provided.\")\n", + " self.app = FirecrawlApp(api_key=api_key)\n", + " self.instruction = instruction\n", + " self.template = template\n", + "\n", + " def search(self, search: str) -> str:\n", + " if not search or len(search) < 5:\n", + " return \"Error: Please provide a valid search query (at least 5 characters).\"\n", + " response_md = \"\"\n", + " try:\n", + " search_result = self.app.search(\n", + " query=self.instruction + search,\n", + " limit=2,\n", + " country=\"cl\",\n", + " lang=\"es\", # Always search in Spanish for best results\n", + " scrape_options=ScrapeOptions(formats=[\"markdown\", \"links\"])\n", + " )\n", + " if search_result and hasattr(search_result, 'data') and search_result.data:\n", + " filtered_results = [\n", + " result for result in search_result.data\n", + " if str(result.get(\"url\", \"\")).startswith(\"https://www.chileatiende.gob.cl/fichas\") and not str(result.get(\"url\", \"\")).endswith(\"pdf\")\n", + " ]\n", + " if filtered_results:\n", + " for num, result in enumerate(filtered_results, start=1):\n", + " response_md += self.template.format(\n", + " result_number=num,\n", + " page_title=str(result.get(\"title\", \"\")),\n", + " page_url=str(result.get(\"url\", \"\")),\n", + " page_content=str(result.get(\"markdown\", \"\"))\n", + " )\n", + " return response_md\n", + " else:\n", + " return None\n", + " else:\n", + " return None\n", + " except Exception as e:\n", + " return f\"Error during search: {e}\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MjkjTWn_ExS0" + }, + "source": [ + "# Firecrawl Prompt Template" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "AfivymU8Dufz" + }, + "outputs": [], + "source": [ + "FIRECRAWL_INSTRUCTION = \"ChileAtiende: \"\n", + "FIRECRAWL_TEMPLATE = \"\"\"\n", + "# Result {result_number}\n", + "\n", + "## Page Name:\n", + "\"{page_title}\"\n", + "\n", + "## URL:\n", + "{page_url}\n", + "\n", + "## Content:\n", + "{page_content}\n", + "\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zK8AA_DlEz9K" + }, + "source": [ + "# Initialize Firecrawl Tool" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "c3NKK0ZjDwKT" + }, + "outputs": [], + "source": [ + "firecrawl_tool = FirecrawlTool(\n", + " api_key=os.environ['FIRECRAWL_API_KEY'],\n", + " instruction=FIRECRAWL_INSTRUCTION,\n", + " template=FIRECRAWL_TEMPLATE\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uzXYIF_gE3XV" + }, + "source": [ + "# Main Chat Loop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TXMgZQNkDx7n", + "outputId": "76303cd1-a576-483f-a22d-9857e5e6d797" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello! I am your ChileAtiende assistant, Tomรกs. How can I help you today?\n", + "You can ask me, for example: How to renew your ID card, How to apply for the Winter Bonus, etc.\n", + "\n", + "You: exit\n", + "Tomรกs: It was a pleasure to help you. Goodbye!\n" + ] + } + ], + "source": [ + "print(\"Hello! I am your ChileAtiende assistant, Tomรกs. How can I help you today?\")\n", + "print(\"You can ask me, for example: How to renew your ID card, How to apply for the Winter Bonus, etc.\")\n", + "\n", + "while True:\n", + " user_input = input(\"\\nYou: \")\n", + " if user_input.lower() in [\"exit\", \"quit\"]:\n", + " print(\"Tomรกs: It was a pleasure to help you. Goodbye!\")\n", + " break\n", + "\n", + " # Translate English input to Spanish for Firecrawl\n", + " spanish_query = translate_to_spanish(user_input)\n", + " spanish_answer = firecrawl_tool.search(spanish_query)\n", + "\n", + " # Only translate if we got a real answer\n", + " if spanish_answer and isinstance(spanish_answer, str) and spanish_answer.strip() and \"Error\" not in spanish_answer:\n", + " try:\n", + " english_answer = translate_to_english(spanish_answer)\n", + " print(\"\\nTomรกs (in English):\\n\", english_answer)\n", + " except Exception as e:\n", + " print(f\"\\nTomรกs: I found information, but couldn't translate it. Here it is in Spanish:\\n{spanish_answer}\\n(Translation error: {e})\")\n", + " else:\n", + " print(\"\\nTomรกs: Sorry, I couldn't find relevant information. Try rephrasing your question or ask about another service.\")" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/examples/cookbooks/Intelligent_Cognitive_Agent.ipynb b/examples/cookbooks/Intelligent_Cognitive_Agent.ipynb new file mode 100644 index 00000000..0c642e8e --- /dev/null +++ b/examples/cookbooks/Intelligent_Cognitive_Agent.ipynb @@ -0,0 +1,446 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "xy4LeDEn7hQM" + }, + "source": [ + "# ๐ง Cognitive Assistant Agent Team (PraisonAI)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ElVhkoB37j8Y" + }, + "source": [ + "This notebook demonstrates a multi-specialist cognitive assistant using PraisonAI, with each specialist as a tool." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WKiORZL790Fj" + }, + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Intelligent_Cognitive_Agent.ipynb)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7l3cAapx7phr" + }, + "source": [ + "# Install Dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oHrh082q86Pp" + }, + "outputs": [], + "source": [ + "!pip install praisonaiagents" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AnA-11hm9R4z" + }, + "source": [ + "# Set API Key" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "n1Fz52T489HE" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# Set your OpenAI or OpenRouter API key for PraisonAI\n", + "os.environ['OPENAI_API_KEY'] = 'Enter your api key' # <-- Replace with your actual OpenAI or OpenRouter API key" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bGbZXPS29XJ-" + }, + "source": [ + "# Imports and Specialist Agent Definitions" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "id": "7MzNN_u_9DKL" + }, + "outputs": [], + "source": [ + "import re\n", + "from praisonaiagents import Agent\n", + "\n", + "# Dummy specialist agent classes for demonstration.\n", + "# Replace these with your actual specialist agent logic if needed.\n", + "class SpecialistAgent:\n", + " def __init__(self, name):\n", + " self.name = name\n", + " def run(self, query):\n", + " return f\"{self.name} specialist response to: {query}\"\n", + "\n", + "# Instantiate all specialist agents (replace with your real classes if available)\n", + "specialists = [\n", + " SpecialistAgent(\"decision_risk_agent\"),\n", + " SpecialistAgent(\"problem_solving_innovation_agent\"),\n", + " SpecialistAgent(\"Systems___Complexity_Agent\"),\n", + " SpecialistAgent(\"bias_psychology_agent\"),\n", + " SpecialistAgent(\"Strategy___Competition_Agent\"),\n", + " SpecialistAgent(\"Learning___Communication_Agent\"),\n", + " SpecialistAgent(\"Efficiency___Process_Agent\"),\n", + " SpecialistAgent(\"motivation_human_factors_agent\"),\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "efcGipcd9bNL" + }, + "source": [ + "# Tool Wrapping and Agent Setup" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "id": "-rotrhkh9FmF" + }, + "outputs": [], + "source": [ + "def make_tool(agent):\n", + " def tool(query: str):\n", + " return agent.run(query)\n", + " # Sanitize the tool name to match PraisonAI's requirements\n", + " safe_name = re.sub(r'[^a-zA-Z0-9_-]', '_', agent.name or \"tool\")\n", + " tool.__name__ = safe_name\n", + " return tool\n", + "\n", + "tools = [make_tool(agent) for agent in specialists]\n", + "\n", + "agent = Agent(\n", + " instructions=\"\"\"\n", + " You are a cognitive assistant with access to a set of specialist tools (decision making, problem solving, systems thinking, psychology, strategy, learning, efficiency, motivation).\n", + " Use the most relevant tool(s) to answer the user's query.\n", + " \"\"\",\n", + " tools=tools,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uZp3cCBs9fMS" + }, + "source": [ + "# User Query and Agent Response" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 777, + "referenced_widgets": [ + "5112c2c89e944d99a9bfbe35d7186a96", + "8dd112d60a6148e3b6cce31d7fb4eb0f" + ] + }, + "id": "VhcEo-2q9HSv", + "outputId": "8bf73c8a-4d0d-47dd-b151-a2a49c79b1f8" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ask your question (or type 'quit' to exit): hi\n", + "\n", + "--- Thinking ---\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ Tools: decision_risk_agent, problem_solving_innovation_agent, Systems___Complexity_Agent, โ\n", + "โ bias_psychology_agent, Strategy___Competition_Agent, Learning___Communication_Agent, โ\n", + "โ Efficiency___Process_Agent, motivation_human_factors_agent โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;134;167;137mTools:\u001b[0m \u001b[3;38;2;180;212;255mdecision_risk_agent\u001b[0m, \u001b[3;38;2;180;212;255mproblem_solving_innovation_agent\u001b[0m, \u001b[3;38;2;180;212;255mSystems___Complexity_Agent\u001b[0m, \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[3;38;2;180;212;255mbias_psychology_agent\u001b[0m, \u001b[3;38;2;180;212;255mStrategy___Competition_Agent\u001b[0m, \u001b[3;38;2;180;212;255mLearning___Communication_Agent\u001b[0m, \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[3;38;2;180;212;255mEfficiency___Process_Agent\u001b[0m, \u001b[3;38;2;180;212;255mmotivation_human_factors_agent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 1.5s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 1.5s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ hi โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m hi \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Hello! How can I assist you today? โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Hello! How can I assist you today? \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello! How can I assist you today?\n", + "\n", + "---------------\n", + "Ask your question (or type 'quit' to exit): exit\n", + "\n", + "--- Thinking ---\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ Tools: decision_risk_agent, problem_solving_innovation_agent, Systems___Complexity_Agent, โ\n", + "โ bias_psychology_agent, Strategy___Competition_Agent, Learning___Communication_Agent, โ\n", + "โ Efficiency___Process_Agent, motivation_human_factors_agent โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;134;167;137mTools:\u001b[0m \u001b[3;38;2;180;212;255mdecision_risk_agent\u001b[0m, \u001b[3;38;2;180;212;255mproblem_solving_innovation_agent\u001b[0m, \u001b[3;38;2;180;212;255mSystems___Complexity_Agent\u001b[0m, \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[3;38;2;180;212;255mbias_psychology_agent\u001b[0m, \u001b[3;38;2;180;212;255mStrategy___Competition_Agent\u001b[0m, \u001b[3;38;2;180;212;255mLearning___Communication_Agent\u001b[0m, \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[3;38;2;180;212;255mEfficiency___Process_Agent\u001b[0m, \u001b[3;38;2;180;212;255mmotivation_human_factors_agent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5112c2c89e944d99a9bfbe35d7186a96", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 1.2s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 1.2s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ exit โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m exit \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ If you have any more questions in the future, feel free to ask. Have a great day! Goodbye! โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m If you have any more questions in the future, feel free to ask. Have a great day! Goodbye! \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If you have any more questions in the future, feel free to ask. Have a great day! Goodbye!\n", + "\n", + "---------------\n", + "Ask your question (or type 'quit' to exit): quit\n", + "Cognitive Assistant Agent Team - Finished.\n" + ] + } + ], + "source": [ + "user_query = input(\"Ask your question (or type 'quit' to exit): \")\n", + "while user_query.lower() != 'quit':\n", + " print(\"\\n--- Thinking ---\")\n", + " response = agent.start(user_query)\n", + " print(response)\n", + " print(\"\\n---------------\")\n", + " user_query = input(\"Ask your question (or type 'quit' to exit): \")\n", + "print(\"Cognitive Assistant Agent Team - Finished.\")" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/examples/cookbooks/PraisonAI_QA_Automation_Copilot.ipynb b/examples/cookbooks/PraisonAI_QA_Automation_Copilot.ipynb new file mode 100644 index 00000000..3e6fefd5 --- /dev/null +++ b/examples/cookbooks/PraisonAI_QA_Automation_Copilot.ipynb @@ -0,0 +1,1656 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "PKMzKghVQCtG" + }, + "source": [ + "# ๐งโ๐ป QA-T Agent: Quality Automation Testing Agent (API Demo)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "w0lyTIeSQIJ2" + }, + "source": [ + "## Description\n", + "This notebook demonstrates how to interact with the QA-T Agent backend API for generating test plans and test cases using AI. You can send requirements or files to your running backend and receive generated test artifacts." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZEVQrjQgZwWz" + }, + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/PraisonAI_QA_Automation_Copilot.ipynb)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QuGDIef8ZBdi" + }, + "source": [ + "# Dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "v_ZuycEqXru7" + }, + "outputs": [], + "source": [ + "!pip install praisonaiagents duckduckgo-search" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4N--_TkMZI2T" + }, + "source": [ + "# Set API Key" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "yXckZn0FYcMS" + }, + "outputs": [], + "source": [ + "import os\n", + "os.environ[\"OPENAI_API_KEY\"] = \"Enter your api key here\" # Replace with your actual key" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6n0teEzWZMFq" + }, + "source": [ + "# Tools Used" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "id": "Su-ZvO2vYi-D" + }, + "outputs": [], + "source": [ + "from praisonaiagents import Agent\n", + "from typing import Dict\n", + "\n", + "# --- PROMPT LOGIC FROM YOUR BACKEND ---\n", + "\n", + "def gherkin_prompt(requirement, feature_name=\"Test Feature\"):\n", + " return f\"\"\"\n", + "Generate a Gherkin feature file for the following requirement:\n", + "{requirement}\n", + "\n", + "Include:\n", + "- Feature name: {feature_name}\n", + "- Multiple scenarios\n", + "- Given-When-Then steps\n", + "- Background if needed\n", + "\n", + "Format as:\n", + "Feature: {feature_name}\n", + "[Description]\n", + "\n", + "Scenario: [Scenario Name]\n", + "Given [precondition]\n", + "When [action]\n", + "Then [expected result]\n", + "\"\"\"\n", + "\n", + "def selenium_prompt(requirement, test_name=\"test_case\", language=\"python\"):\n", + " return f\"\"\"\n", + "Generate a Selenium test script in {language} for:\n", + "{requirement}\n", + "\n", + "Include:\n", + "- Test name: {test_name}\n", + "- WebDriver setup\n", + "- Page object pattern\n", + "- Assertions\n", + "- Error handling\n", + "\"\"\"\n", + "\n", + "def manual_test_prompt(user_story):\n", + " return f\"\"\"\n", + "Generate manual test cases for this user story:\n", + "{user_story}\n", + "\n", + "Include:\n", + "- Test case ID\n", + "- Test steps\n", + "- Expected results\n", + "- Test data\n", + "- Priority levels\n", + "\n", + "Format as:\n", + "Test Case ID: TC001\n", + "Test Steps:\n", + "1. [step]\n", + "2. [step]\n", + "Expected Result: [result]\n", + "Priority: [High/Medium/Low]\n", + "\"\"\"\n", + "\n", + "def chat_prompt(question):\n", + " return f\"\"\"\n", + "Answer this testing question: {question}\n", + "\n", + "Provide:\n", + "- Clear explanation\n", + "- Best practices\n", + "- Examples if relevant\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wb-qb4N2ZQWw" + }, + "source": [ + "# YAML Prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WUEPjwKAYm6M", + "outputId": "ad38c608-b7b4-4f88-e173-f7b799e59e9c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "name: QA Test Generation Agent\n", + "description: AI-powered test automation system\n", + "\n", + "tools:\n", + " - name: generate_gherkin\n", + " description: Generate Gherkin feature files from user stories\n", + " parameters:\n", + " requirement: str\n", + " feature_name: str\n", + "\n", + " - name: generate_selenium\n", + " description: Generate Selenium test scripts in Python\n", + " parameters:\n", + " requirement: str\n", + " test_name: str\n", + " language: str\n", + "\n", + " - name: generate_manual_tests\n", + " description: Generate manual test cases\n", + " parameters:\n", + " user_story: str\n", + "\n", + " - name: chat_assistance\n", + " description: Provide testing guidance and explanations\n", + " parameters:\n", + " question: str\n", + "\n" + ] + } + ], + "source": [ + "yaml_prompt = \"\"\"\n", + "name: QA Test Generation Agent\n", + "description: AI-powered test automation system\n", + "\n", + "tools:\n", + " - name: generate_gherkin\n", + " description: Generate Gherkin feature files from user stories\n", + " parameters:\n", + " requirement: str\n", + " feature_name: str\n", + "\n", + " - name: generate_selenium\n", + " description: Generate Selenium test scripts in Python\n", + " parameters:\n", + " requirement: str\n", + " test_name: str\n", + " language: str\n", + "\n", + " - name: generate_manual_tests\n", + " description: Generate manual test cases\n", + " parameters:\n", + " user_story: str\n", + "\n", + " - name: chat_assistance\n", + " description: Provide testing guidance and explanations\n", + " parameters:\n", + " question: str\n", + "\"\"\"\n", + "print(yaml_prompt)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OuP0_EJ6ZTzw" + }, + "source": [ + "# Main (Agent Routing Logic from Your Backend)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "id": "gwuAKPgHYpj_" + }, + "outputs": [], + "source": [ + "class QATestAgent:\n", + " def __init__(self, llm_agent):\n", + " self.llm_agent = llm_agent\n", + "\n", + " def route_request(self, request: Dict) -> str:\n", + " agent_type = request.get(\"agentType\", \"chat\").lower()\n", + " requirement = request.get(\"requirement\", \"\")\n", + " feature_name = request.get(\"featureName\", \"Test Feature\")\n", + " test_name = request.get(\"testName\", \"test_case\")\n", + " language = request.get(\"language\", \"python\")\n", + " user_story = request.get(\"user_story\", requirement)\n", + " question = request.get(\"question\", requirement)\n", + "\n", + " if agent_type in [\"gherkin\", \"test_generator\"]:\n", + " prompt = gherkin_prompt(requirement, feature_name)\n", + " elif agent_type in [\"selenium\", \"selenium_generator\"]:\n", + " prompt = selenium_prompt(requirement, test_name, language)\n", + " elif agent_type in [\"manual\", \"manual_testcases\"]:\n", + " prompt = manual_test_prompt(user_story)\n", + " else:\n", + " prompt = chat_prompt(question)\n", + "\n", + " # Use PraisonAI LLM to generate the response\n", + " return self.llm_agent.start(prompt)\n", + "\n", + "# Create the LLM agent (PraisonAI)\n", + "llm_agent = Agent(\n", + " instructions=\"You are a QA Test Generation Agent. Use the prompt to generate the required output.\",\n", + " tools=[]\n", + ")\n", + "\n", + "qa_agent = QATestAgent(llm_agent)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mGMAPiPBZbvF" + }, + "source": [ + "# Usage Examples" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "36fc7014ac8d46d9be0c449ea37159bd", + "fbd8a1ff0c6c4fd1b5648e4c77450f32", + "d3252a2e8cf94dea969f909d521a0b22", + "f3b8444dca734338bad4d93bc0e73a23", + "16cdd551272342dc9b90aea5052ddc87", + "feaada3e9d6a4586a14110ef2b8ab62f", + "ad9fe9c352c24614ad3de1b127b1c560", + "101a7ed4a3bf4b8da056ad7d49fe6241" + ] + }, + "id": "pWr2KpJGYtBw", + "outputId": "6e29c688-b256-4fac-f0fe-8d8fac1acf3f" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "36fc7014ac8d46d9be0c449ea37159bd", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 8.6s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 8.6s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Generate a Gherkin feature file for the following requirement: User login functionality with email and password โ\n", + "โ โ\n", + "โ Include: โ\n", + "โ โ\n", + "โ โข Feature name: User Authentication โ\n", + "โ โข Multiple scenarios โ\n", + "โ โข Given-When-Then steps โ\n", + "โ โข Background if needed โ\n", + "โ โ\n", + "โ Format as: Feature: User Authentication [Description] โ\n", + "โ โ\n", + "โ Scenario: [Scenario Name] Given [precondition] When [action] Then [expected result] โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Generate a Gherkin feature file for the following requirement: User login functionality with email and password \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Include: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mFeature name: User Authentication \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mMultiple scenarios \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mGiven-When-Then steps \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mBackground if needed \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Format as: Feature: User Authentication [Description] \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Scenario: [Scenario Name] Given [precondition] When [action] Then [expected result] \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Feature: User Authentication โ\n", + "โ This feature allows users to log in to the application using their email and password. โ\n", + "โ Successful login grants access to user-specific features and data. โ\n", + "โ โ\n", + "โ Background: โ\n", + "โ Given the user is on the login page โ\n", + "โ โ\n", + "โ Scenario: Successful login with valid credentials โ\n", + "โ Given the user has a registered account with email \"user@example.com\" and password \"password123\" โ\n", + "โ When the user enters the email \"user@example.com\" โ\n", + "โ And the user enters the password \"password123\" โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should be redirected to the dashboard โ\n", + "โ And the user should see a welcome message โ\n", + "โ โ\n", + "โ Scenario: Unsuccessful login with incorrect password โ\n", + "โ Given the user has a registered account with email \"user@example.com\" โ\n", + "โ When the user enters the email \"user@example.com\" โ\n", + "โ And the user enters the password \"wrongpassword\" โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should see an error message \"Invalid email or password\" โ\n", + "โ โ\n", + "โ Scenario: Unsuccessful login with unregistered email โ\n", + "โ When the user enters the email \"unregistered@example.com\" โ\n", + "โ And the user enters the password \"password123\" โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should see an error message \"Invalid email or password\" โ\n", + "โ โ\n", + "โ Scenario: Unsuccessful login with empty email and password fields โ\n", + "โ When the user leaves the email field empty โ\n", + "โ And the user leaves the password field empty โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should see an error message \"Email and password are required\" โ\n", + "โ โ\n", + "โ Scenario: Unsuccessful login with empty password field โ\n", + "โ Given the user has a registered account with email \"user@example.com\" โ\n", + "โ When the user enters the email \"user@example.com\" โ\n", + "โ And the user leaves the password field empty โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should see an error message \"Password is required\" โ\n", + "โ โ\n", + "โ Scenario: Unsuccessful login with empty email field โ\n", + "โ When the user leaves the email field empty โ\n", + "โ And the user enters the password \"password123\" โ\n", + "โ And the user clicks the login button โ\n", + "โ Then the user should see an error message \"Email is required\" โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mFeature\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m User Authentication\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mT\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m.\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mS\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m-\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m.\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mBackground\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m Given \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Successful login with valid credentials\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m Given \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m1\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m2\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m3\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mWhen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m1\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m2\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m3\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Unsuccessful login with incorrect password\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m Given \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mWhen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mn\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mg\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mI\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mn\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mv\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Unsuccessful login with unregistered email\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m When \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mn\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mg\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mt\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m1\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m2\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m3\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mI\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mn\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mv\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Unsuccessful login with empty email and password fields\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m When \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mv\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34my\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mv\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34my\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mE\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mn\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mq\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Unsuccessful login with empty password field\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m Given \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mWhen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m@\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mx\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m.\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mc\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mv\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34my\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mP\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mq\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mScenario\u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m:\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m Unsuccessful login with empty email field\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34m When \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mv\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mf\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34my\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mp\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mw\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mp\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mw\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mo\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m1\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m2\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m3\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mAnd \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mc\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mk\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mi\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mb\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mThen \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mt\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mh\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mu\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ml\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mn\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mo\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mr\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mm\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ms\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34ma\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mg\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34me\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mE\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mm\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ma\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ml\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34ms\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mq\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mu\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mi\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mr\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34md\u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m\"\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== Gherkin Generation ===\n", + " ```gherkin\n", + "Feature: User Authentication\n", + " This feature allows users to log in to the application using their email and password. \n", + " Successful login grants access to user-specific features and data.\n", + "\n", + " Background:\n", + " Given the user is on the login page\n", + "\n", + " Scenario: Successful login with valid credentials\n", + " Given the user has a registered account with email \"user@example.com\" and password \"password123\"\n", + " When the user enters the email \"user@example.com\"\n", + " And the user enters the password \"password123\"\n", + " And the user clicks the login button\n", + " Then the user should be redirected to the dashboard\n", + " And the user should see a welcome message\n", + "\n", + " Scenario: Unsuccessful login with incorrect password\n", + " Given the user has a registered account with email \"user@example.com\"\n", + " When the user enters the email \"user@example.com\"\n", + " And the user enters the password \"wrongpassword\"\n", + " And the user clicks the login button\n", + " Then the user should see an error message \"Invalid email or password\"\n", + "\n", + " Scenario: Unsuccessful login with unregistered email\n", + " When the user enters the email \"unregistered@example.com\"\n", + " And the user enters the password \"password123\"\n", + " And the user clicks the login button\n", + " Then the user should see an error message \"Invalid email or password\"\n", + "\n", + " Scenario: Unsuccessful login with empty email and password fields\n", + " When the user leaves the email field empty\n", + " And the user leaves the password field empty\n", + " And the user clicks the login button\n", + " Then the user should see an error message \"Email and password are required\"\n", + "\n", + " Scenario: Unsuccessful login with empty password field\n", + " Given the user has a registered account with email \"user@example.com\"\n", + " When the user enters the email \"user@example.com\"\n", + " And the user leaves the password field empty\n", + " And the user clicks the login button\n", + " Then the user should see an error message \"Password is required\"\n", + "\n", + " Scenario: Unsuccessful login with empty email field\n", + " When the user leaves the email field empty\n", + " And the user enters the password \"password123\"\n", + " And the user clicks the login button\n", + " Then the user should see an error message \"Email is required\"\n", + "```\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d3252a2e8cf94dea969f909d521a0b22", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 11.4s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 11.4s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Generate a Selenium test script in python for: Test login page with valid credentials โ\n", + "โ โ\n", + "โ Include: โ\n", + "โ โ\n", + "โ โข Test name: test_login_valid โ\n", + "โ โข WebDriver setup โ\n", + "โ โข Page object pattern โ\n", + "โ โข Assertions โ\n", + "โ โข Error handling โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Generate a Selenium test script in python for: Test login page with valid credentials \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Include: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTest name: test_login_valid \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mWebDriver setup \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mPage object pattern \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mAssertions \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mError handling \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ from selenium import webdriver โ\n", + "โ from selenium.webdriver.common.by import By โ\n", + "โ from selenium.webdriver.common.keys import Keys โ\n", + "โ from selenium.webdriver.support.ui import WebDriverWait โ\n", + "โ from selenium.webdriver.support import expected_conditions as EC โ\n", + "โ import unittest โ\n", + "โ โ\n", + "โ class LoginPage: โ\n", + "โ def __init__(self, driver): โ\n", + "โ self.driver = driver โ\n", + "โ self.email_input = (By.ID, 'email') # Assuming the email input field has an ID 'email' โ\n", + "โ self.password_input = (By.ID, 'password') # Assuming the password input field has an ID 'password' โ\n", + "โ self.login_button = (By.ID, 'loginButton') # Assuming the login button has an ID 'loginButton' โ\n", + "โ self.dashboard = (By.ID, 'dashboard') # Assuming the dashboard has an ID 'dashboard' โ\n", + "โ self.welcome_message = (By.ID, 'welcomeMessage') # Assuming the welcome message has an ID โ\n", + "โ 'welcomeMessage' โ\n", + "โ โ\n", + "โ def enter_email(self, email): โ\n", + "โ email_field = self.driver.find_element(*self.email_input) โ\n", + "โ email_field.clear() โ\n", + "โ email_field.send_keys(email) โ\n", + "โ โ\n", + "โ def enter_password(self, password): โ\n", + "โ password_field = self.driver.find_element(*self.password_input) โ\n", + "โ password_field.clear() โ\n", + "โ password_field.send_keys(password) โ\n", + "โ โ\n", + "โ def click_login(self): โ\n", + "โ login_btn = self.driver.find_element(*self.login_button) โ\n", + "โ login_btn.click() โ\n", + "โ โ\n", + "โ def is_dashboard_displayed(self): โ\n", + "โ try: โ\n", + "โ WebDriverWait(self.driver, 10).until( โ\n", + "โ EC.visibility_of_element_located(self.dashboard) โ\n", + "โ ) โ\n", + "โ return True โ\n", + "โ except: โ\n", + "โ return False โ\n", + "โ โ\n", + "โ def get_welcome_message(self): โ\n", + "โ try: โ\n", + "โ welcome_msg = WebDriverWait(self.driver, 10).until( โ\n", + "โ EC.visibility_of_element_located(self.welcome_message) โ\n", + "โ ) โ\n", + "โ return welcome_msg.text โ\n", + "โ except: โ\n", + "โ return None โ\n", + "โ โ\n", + "โ class TestLogin(unittest.TestCase): โ\n", + "โ def setUp(self): โ\n", + "โ self.driver = webdriver.Chrome() # Or use any other WebDriver โ\n", + "โ self.driver.get('http://example.com/login') # Replace with the actual login page URL โ\n", + "โ self.login_page = LoginPage(self.driver) โ\n", + "โ โ\n", + "โ def test_login_valid(self): โ\n", + "โ try: โ\n", + "โ self.login_page.enter_email('user@example.com') โ\n", + "โ self.login_page.enter_password('password123') โ\n", + "โ self.login_page.click_login() โ\n", + "โ โ\n", + "โ # Assertions โ\n", + "โ self.assertTrue(self.login_page.is_dashboard_displayed(), \"Dashboard is not displayed\") โ\n", + "โ welcome_message = self.login_page.get_welcome_message() โ\n", + "โ self.assertIsNotNone(welcome_message, \"Welcome message is not displayed\") โ\n", + "โ self.assertIn(\"Welcome\", welcome_message, \"Welcome message does not contain 'Welcome'\") โ\n", + "โ except Exception as e: โ\n", + "โ self.fail(f\"Test failed due to an unexpected error: {e}\") โ\n", + "โ โ\n", + "โ def tearDown(self): โ\n", + "โ self.driver.quit() โ\n", + "โ โ\n", + "โ if __name__ == \"__main__\": โ\n", + "โ unittest.main() โ\n", + "โ โ\n", + "โ โ\n", + "โ This script uses the Page Object Pattern to encapsulate the login page elements and actions. It includes a test โ\n", + "โ case test_login_valid that verifies successful login with valid credentials. The script also includes error โ\n", + "โ handling to catch unexpected exceptions during the test execution. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mfrom\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mselenium\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mfrom\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mselenium\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mcommon\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mby\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mfrom\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mselenium\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mcommon\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mkeys\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mKeys\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mfrom\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mselenium\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34msupport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mui\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mWebDriverWait\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mfrom\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mselenium\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34msupport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mexpected_conditions\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mas\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mEC\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34mimport\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34munittest\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mclass\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mLoginPage\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34m__init__\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail_input\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mID\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34memail\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assuming the email input field has an ID 'email'\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword_input\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mID\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mpassword\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assuming the password input field has an ID 'password'\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_button\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mID\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mloginButton\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assuming the login button has an ID 'loginButton'\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdashboard\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mID\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mdashboard\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assuming the dashboard has an ID 'dashboard'\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mBy\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mID\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mwelcomeMessage\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assuming the welcome message has an ID \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m'welcomeMessage'\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34menter_email\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail_field\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mfind_element\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m*\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail_input\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail_field\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mclear\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail_field\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34msend_keys\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34memail\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34menter_password\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword_field\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mfind_element\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m*\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword_input\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword_field\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mclear\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword_field\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34msend_keys\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mpassword\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mclick_login\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_btn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mfind_element\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m*\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_button\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_btn\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mclick\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mis_dashboard_displayed\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mtry\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mWebDriverWait\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;174;129;255;48;2;39;40;34m10\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34muntil\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mEC\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mvisibility_of_element_located\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdashboard\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mreturn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mTrue\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mexcept\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mreturn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mFalse\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mget_welcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mtry\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_msg\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mWebDriverWait\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;174;129;255;48;2;39;40;34m10\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34muntil\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mEC\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mvisibility_of_element_located\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mreturn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_msg\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mtext\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mexcept\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mreturn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mNone\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mclass\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mTestLogin\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34munittest\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mTestCase\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34msetUp\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwebdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mChrome\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Or use any other WebDriver\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mget\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mhttp://example.com/login\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Replace with the actual login page URL\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mLoginPage\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mtest_login_valid\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mtry\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34menter_email\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34muser@example.com\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34menter_password\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mpassword123\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mclick_login\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;149;144;119;48;2;39;40;34m# Assertions\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34massertTrue\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mis_dashboard_displayed\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mDashboard is not displayed\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m=\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mlogin_page\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mget_welcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34massertIsNotNone\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mWelcome message is not displayed\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34massertIn\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mWelcome\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mwelcome_message\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m,\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mWelcome message does not contain \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mWelcome\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m'\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mexcept\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mException\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mas\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34me\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mfail\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mf\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34mTest failed due to an unexpected error: \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m{\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34me\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m}\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mdef\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;166;226;46;48;2;39;40;34mtearDown\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mself\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mdriver\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mquit\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;102;217;239;48;2;39;40;34mif\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m__name__\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m==\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m__main__\u001b[0m\u001b[38;2;230;219;116;48;2;39;40;34m\"\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m:\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m \u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34munittest\u001b[0m\u001b[38;2;255;70;137;48;2;39;40;34m.\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34mmain\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m(\u001b[0m\u001b[38;2;248;248;242;48;2;39;40;34m)\u001b[0m\u001b[48;2;39;40;34m \u001b[0m\u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[48;2;39;40;34m \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m This script uses the Page Object Pattern to encapsulate the login page elements and actions. It includes a test \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m case \u001b[1;36;40mtest_login_valid\u001b[0m that verifies successful login with valid credentials. The script also includes error \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m handling to catch unexpected exceptions during the test execution. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "=== Selenium Generation ===\n", + " ```python\n", + "from selenium import webdriver\n", + "from selenium.webdriver.common.by import By\n", + "from selenium.webdriver.common.keys import Keys\n", + "from selenium.webdriver.support.ui import WebDriverWait\n", + "from selenium.webdriver.support import expected_conditions as EC\n", + "import unittest\n", + "\n", + "class LoginPage:\n", + " def __init__(self, driver):\n", + " self.driver = driver\n", + " self.email_input = (By.ID, 'email') # Assuming the email input field has an ID 'email'\n", + " self.password_input = (By.ID, 'password') # Assuming the password input field has an ID 'password'\n", + " self.login_button = (By.ID, 'loginButton') # Assuming the login button has an ID 'loginButton'\n", + " self.dashboard = (By.ID, 'dashboard') # Assuming the dashboard has an ID 'dashboard'\n", + " self.welcome_message = (By.ID, 'welcomeMessage') # Assuming the welcome message has an ID 'welcomeMessage'\n", + "\n", + " def enter_email(self, email):\n", + " email_field = self.driver.find_element(*self.email_input)\n", + " email_field.clear()\n", + " email_field.send_keys(email)\n", + "\n", + " def enter_password(self, password):\n", + " password_field = self.driver.find_element(*self.password_input)\n", + " password_field.clear()\n", + " password_field.send_keys(password)\n", + "\n", + " def click_login(self):\n", + " login_btn = self.driver.find_element(*self.login_button)\n", + " login_btn.click()\n", + "\n", + " def is_dashboard_displayed(self):\n", + " try:\n", + " WebDriverWait(self.driver, 10).until(\n", + " EC.visibility_of_element_located(self.dashboard)\n", + " )\n", + " return True\n", + " except:\n", + " return False\n", + "\n", + " def get_welcome_message(self):\n", + " try:\n", + " welcome_msg = WebDriverWait(self.driver, 10).until(\n", + " EC.visibility_of_element_located(self.welcome_message)\n", + " )\n", + " return welcome_msg.text\n", + " except:\n", + " return None\n", + "\n", + "class TestLogin(unittest.TestCase):\n", + " def setUp(self):\n", + " self.driver = webdriver.Chrome() # Or use any other WebDriver\n", + " self.driver.get('http://example.com/login') # Replace with the actual login page URL\n", + " self.login_page = LoginPage(self.driver)\n", + "\n", + " def test_login_valid(self):\n", + " try:\n", + " self.login_page.enter_email('user@example.com')\n", + " self.login_page.enter_password('password123')\n", + " self.login_page.click_login()\n", + "\n", + " # Assertions\n", + " self.assertTrue(self.login_page.is_dashboard_displayed(), \"Dashboard is not displayed\")\n", + " welcome_message = self.login_page.get_welcome_message()\n", + " self.assertIsNotNone(welcome_message, \"Welcome message is not displayed\")\n", + " self.assertIn(\"Welcome\", welcome_message, \"Welcome message does not contain 'Welcome'\")\n", + " except Exception as e:\n", + " self.fail(f\"Test failed due to an unexpected error: {e}\")\n", + "\n", + " def tearDown(self):\n", + " self.driver.quit()\n", + "\n", + "if __name__ == \"__main__\":\n", + " unittest.main()\n", + "```\n", + "\n", + "This script uses the Page Object Pattern to encapsulate the login page elements and actions. It includes a test case `test_login_valid` that verifies successful login with valid credentials. The script also includes error handling to catch unexpected exceptions during the test execution.\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "16cdd551272342dc9b90aea5052ddc87", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 8.5s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 8.5s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Generate manual test cases for this user story: As a user, I want to login to the application so that I can โ\n", + "โ access my account โ\n", + "โ โ\n", + "โ Include: โ\n", + "โ โ\n", + "โ โข Test case ID โ\n", + "โ โข Test steps โ\n", + "โ โข Expected results โ\n", + "โ โข Test data โ\n", + "โ โข Priority levels โ\n", + "โ โ\n", + "โ Format as: Test Case ID: TC001 Test Steps: โ\n", + "โ โ\n", + "โ 1 [step] โ\n", + "โ 2 [step] Expected Result: [result] Priority: [High/Medium/Low] โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Generate manual test cases for this user story: As a user, I want to login to the application so that I can \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m access my account \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Include: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTest case ID \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTest steps \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mExpected results \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTest data \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mPriority levels \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Format as: Test Case ID: TC001 Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0m[step] \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0m[step] Expected Result: [result] Priority: [High/Medium/Low] \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Test Case ID: TC001 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Enter a valid email address \"user@example.com\" in the email field. โ\n", + "โ 3 Enter a valid password \"password123\" in the password field. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: The user is successfully logged in and redirected to the dashboard. A welcome message is โ\n", + "โ displayed. โ\n", + "โ Test Data: Email - \"user@example.com\", Password - \"password123\" โ\n", + "โ Priority: High โ\n", + "โ โ\n", + "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ\n", + "โ Test Case ID: TC002 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Enter a valid email address \"user@example.com\" in the email field. โ\n", + "โ 3 Enter an incorrect password \"wrongpassword\" in the password field. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login โ\n", + "โ page. โ\n", + "โ Test Data: Email - \"user@example.com\", Password - \"wrongpassword\" โ\n", + "โ Priority: High โ\n", + "โ โ\n", + "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ\n", + "โ Test Case ID: TC003 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Enter an unregistered email address \"unregistered@example.com\" in the email field. โ\n", + "โ 3 Enter any password \"password123\" in the password field. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login โ\n", + "โ page. โ\n", + "โ Test Data: Email - \"unregistered@example.com\", Password - \"password123\" โ\n", + "โ Priority: High โ\n", + "โ โ\n", + "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ\n", + "โ Test Case ID: TC004 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Leave the email field empty. โ\n", + "โ 3 Leave the password field empty. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: An error message \"Email and password are required\" is displayed. The user remains on the โ\n", + "โ login page. โ\n", + "โ Test Data: Email - \"\", Password - \"\" โ\n", + "โ Priority: Medium โ\n", + "โ โ\n", + "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ\n", + "โ Test Case ID: TC005 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Enter a valid email address \"user@example.com\" in the email field. โ\n", + "โ 3 Leave the password field empty. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: An error message \"Password is required\" is displayed. The user remains on the login page. โ\n", + "โ Test Data: Email - \"user@example.com\", Password - \"\" โ\n", + "โ Priority: Medium โ\n", + "โ โ\n", + "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ\n", + "โ Test Case ID: TC006 โ\n", + "โ Test Steps: โ\n", + "โ โ\n", + "โ 1 Navigate to the application login page. โ\n", + "โ 2 Leave the email field empty. โ\n", + "โ 3 Enter a valid password \"password123\" in the password field. โ\n", + "โ 4 Click the login button. โ\n", + "โ Expected Result: An error message \"Email is required\" is displayed. The user remains on the login page. โ\n", + "โ Test Data: Email - \"\", Password - \"password123\" โ\n", + "โ Priority: Medium โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC001 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mEnter a valid email address \"user@example.com\" in the email field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mEnter a valid password \"password123\" in the password field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: The user is successfully logged in and redirected to the dashboard. A welcome message is \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mdisplayed. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"user@example.com\", Password - \"password123\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: High \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[33mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC002 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mEnter a valid email address \"user@example.com\" in the email field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mEnter an incorrect password \"wrongpassword\" in the password field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mpage. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"user@example.com\", Password - \"wrongpassword\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: High \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[33mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC003 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mEnter an unregistered email address \"unregistered@example.com\" in the email field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mEnter any password \"password123\" in the password field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mpage. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"unregistered@example.com\", Password - \"password123\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: High \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[33mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC004 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mLeave the email field empty. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mLeave the password field empty. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: An error message \"Email and password are required\" is displayed. The user remains on the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mlogin page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"\", Password - \"\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: Medium \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[33mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC005 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mEnter a valid email address \"user@example.com\" in the email field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mLeave the password field empty. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: An error message \"Password is required\" is displayed. The user remains on the login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"user@example.com\", Password - \"\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: Medium \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[33mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Case ID: TC006 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Test Steps: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0mNavigate to the application login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0mLeave the email field empty. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0mEnter a valid password \"password123\" in the password field. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0mClick the login button. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mExpected Result: An error message \"Email is required\" is displayed. The user remains on the login page. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mTest Data: Email - \"\", Password - \"password123\" \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mPriority: Medium \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "=== Manual Test Generation ===\n", + " Test Case ID: TC001 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Enter a valid email address \"user@example.com\" in the email field. \n", + "3. Enter a valid password \"password123\" in the password field. \n", + "4. Click the login button. \n", + "Expected Result: The user is successfully logged in and redirected to the dashboard. A welcome message is displayed. \n", + "Test Data: Email - \"user@example.com\", Password - \"password123\" \n", + "Priority: High \n", + "\n", + "---\n", + "\n", + "Test Case ID: TC002 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Enter a valid email address \"user@example.com\" in the email field. \n", + "3. Enter an incorrect password \"wrongpassword\" in the password field. \n", + "4. Click the login button. \n", + "Expected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login page. \n", + "Test Data: Email - \"user@example.com\", Password - \"wrongpassword\" \n", + "Priority: High \n", + "\n", + "---\n", + "\n", + "Test Case ID: TC003 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Enter an unregistered email address \"unregistered@example.com\" in the email field. \n", + "3. Enter any password \"password123\" in the password field. \n", + "4. Click the login button. \n", + "Expected Result: An error message \"Invalid email or password\" is displayed. The user remains on the login page. \n", + "Test Data: Email - \"unregistered@example.com\", Password - \"password123\" \n", + "Priority: High \n", + "\n", + "---\n", + "\n", + "Test Case ID: TC004 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Leave the email field empty. \n", + "3. Leave the password field empty. \n", + "4. Click the login button. \n", + "Expected Result: An error message \"Email and password are required\" is displayed. The user remains on the login page. \n", + "Test Data: Email - \"\", Password - \"\" \n", + "Priority: Medium \n", + "\n", + "---\n", + "\n", + "Test Case ID: TC005 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Enter a valid email address \"user@example.com\" in the email field. \n", + "3. Leave the password field empty. \n", + "4. Click the login button. \n", + "Expected Result: An error message \"Password is required\" is displayed. The user remains on the login page. \n", + "Test Data: Email - \"user@example.com\", Password - \"\" \n", + "Priority: Medium \n", + "\n", + "---\n", + "\n", + "Test Case ID: TC006 \n", + "Test Steps: \n", + "1. Navigate to the application login page. \n", + "2. Leave the email field empty. \n", + "3. Enter a valid password \"password123\" in the password field. \n", + "4. Click the login button. \n", + "Expected Result: An error message \"Email is required\" is displayed. The user remains on the login page. \n", + "Test Data: Email - \"\", Password - \"password123\" \n", + "Priority: Medium\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ad9fe9c352c24614ad3de1b127b1c560", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 11.6s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 11.6s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Answer this testing question: What is the difference between unit testing and integration testing? โ\n", + "โ โ\n", + "โ Provide: โ\n", + "โ โ\n", + "โ โข Clear explanation โ\n", + "โ โข Best practices โ\n", + "โ โข Examples if relevant โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Answer this testing question: What is the difference between unit testing and integration testing? \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Provide: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mClear explanation \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mBest practices \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mExamples if relevant \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Explanation: โ\n", + "โ โ\n", + "โ Unit Testing: โ\n", + "โ โ\n", + "โ โข Unit testing involves testing individual components or functions of a software application in isolation. The โ\n", + "โ primary goal is to validate that each unit of the software performs as expected. โ\n", + "โ โข It is typically performed by developers during the development phase. โ\n", + "โ โข Unit tests are usually automated and written using testing frameworks such as JUnit for Java, NUnit for โ\n", + "โ .NET, or PyTest for Python. โ\n", + "โ โข These tests focus on a single \"unit\" of code, which could be a function, method, or class, and ensure that โ\n", + "โ it behaves correctly under various conditions. โ\n", + "โ โ\n", + "โ Integration Testing: โ\n", + "โ โ\n", + "โ โข Integration testing focuses on testing the interactions between different components or modules of a โ\n", + "โ software application. โ\n", + "โ โข The goal is to identify issues that occur when units are combined and to ensure that integrated components โ\n", + "โ work together as intended. โ\n", + "โ โข It is usually performed after unit testing and can be done by developers or dedicated testers. โ\n", + "โ โข Integration tests can be automated or manual and often involve testing interfaces, data flow, and โ\n", + "โ communication between modules. โ\n", + "โ โ\n", + "โ Best Practices: โ\n", + "โ โ\n", + "โ Unit Testing Best Practices: โ\n", + "โ โ\n", + "โ โข Write tests for all critical paths and edge cases. โ\n", + "โ โข Keep tests small and focused on a single functionality. โ\n", + "โ โข Use mock objects to isolate the unit being tested from its dependencies. โ\n", + "โ โข Ensure tests are fast to execute to encourage frequent runs. โ\n", + "โ โข Maintain clear and descriptive test names to indicate their purpose. โ\n", + "โ โ\n", + "โ Integration Testing Best Practices: โ\n", + "โ โ\n", + "โ โข Test interactions between modules in a realistic environment that mimics production. โ\n", + "โ โข Focus on testing interfaces and data exchange between components. โ\n", + "โ โข Use real data where possible to simulate actual usage scenarios. โ\n", + "โ โข Prioritize testing critical integration points that are prone to failure. โ\n", + "โ โข Automate integration tests to ensure they are run consistently and frequently. โ\n", + "โ โ\n", + "โ Examples: โ\n", + "โ โ\n", + "โ Unit Testing Example: โ\n", + "โ โ\n", + "โ โข Testing a function that calculates the sum of two numbers. The test would check if the function returns the โ\n", + "โ correct sum for various input values, such as positive numbers, negative numbers, and zero. โ\n", + "โ โ\n", + "โ Integration Testing Example: โ\n", + "โ โ\n", + "โ โข Testing the interaction between a user authentication module and a database. The test would verify that the โ\n", + "โ authentication module correctly queries the database to validate user credentials and handles various โ\n", + "โ scenarios like successful login, incorrect password, and unregistered email. โ\n", + "โ โ\n", + "โ In summary, unit testing focuses on individual components in isolation, while integration testing ensures that โ\n", + "โ combined components work together as expected. Both types of testing are crucial for delivering a reliable and โ\n", + "โ robust software application. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mExplanation:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mUnit Testing:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mUnit testing involves testing individual components or functions of a software application in isolation. The \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mprimary goal is to validate that each unit of the software performs as expected. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mIt is typically performed by developers during the development phase. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mUnit tests are usually automated and written using testing frameworks such as JUnit for Java, NUnit for \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0m.NET, or PyTest for Python. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mThese tests focus on a single \"unit\" of code, which could be a function, method, or class, and ensure that \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mit behaves correctly under various conditions. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mIntegration Testing:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mIntegration testing focuses on testing the interactions between different components or modules of a \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0msoftware application. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mThe goal is to identify issues that occur when units are combined and to ensure that integrated components \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mwork together as intended. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mIt is usually performed after unit testing and can be done by developers or dedicated testers. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mIntegration tests can be automated or manual and often involve testing interfaces, data flow, and \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mcommunication between modules. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mBest Practices:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mUnit Testing Best Practices:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mWrite tests for all critical paths and edge cases. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mKeep tests small and focused on a single functionality. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mUse mock objects to isolate the unit being tested from its dependencies. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mEnsure tests are fast to execute to encourage frequent runs. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mMaintain clear and descriptive test names to indicate their purpose. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mIntegration Testing Best Practices:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTest interactions between modules in a realistic environment that mimics production. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mFocus on testing interfaces and data exchange between components. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mUse real data where possible to simulate actual usage scenarios. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mPrioritize testing critical integration points that are prone to failure. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mAutomate integration tests to ensure they are run consistently and frequently. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mExamples:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mUnit Testing Example:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTesting a function that calculates the sum of two numbers. The test would check if the function returns the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mcorrect sum for various input values, such as positive numbers, negative numbers, and zero. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1mIntegration Testing Example:\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m โข \u001b[0mTesting the interaction between a user authentication module and a database. The test would verify that the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mauthentication module correctly queries the database to validate user credentials and handles various \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mscenarios like successful login, incorrect password, and unregistered email. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m In summary, unit testing focuses on individual components in isolation, while integration testing ensures that \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m combined components work together as expected. Both types of testing are crucial for delivering a reliable and \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m robust software application. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "=== Chat Assistance ===\n", + " **Explanation:**\n", + "\n", + "**Unit Testing:**\n", + "- Unit testing involves testing individual components or functions of a software application in isolation. The primary goal is to validate that each unit of the software performs as expected.\n", + "- It is typically performed by developers during the development phase.\n", + "- Unit tests are usually automated and written using testing frameworks such as JUnit for Java, NUnit for .NET, or PyTest for Python.\n", + "- These tests focus on a single \"unit\" of code, which could be a function, method, or class, and ensure that it behaves correctly under various conditions.\n", + "\n", + "**Integration Testing:**\n", + "- Integration testing focuses on testing the interactions between different components or modules of a software application.\n", + "- The goal is to identify issues that occur when units are combined and to ensure that integrated components work together as intended.\n", + "- It is usually performed after unit testing and can be done by developers or dedicated testers.\n", + "- Integration tests can be automated or manual and often involve testing interfaces, data flow, and communication between modules.\n", + "\n", + "**Best Practices:**\n", + "\n", + "**Unit Testing Best Practices:**\n", + "- Write tests for all critical paths and edge cases.\n", + "- Keep tests small and focused on a single functionality.\n", + "- Use mock objects to isolate the unit being tested from its dependencies.\n", + "- Ensure tests are fast to execute to encourage frequent runs.\n", + "- Maintain clear and descriptive test names to indicate their purpose.\n", + "\n", + "**Integration Testing Best Practices:**\n", + "- Test interactions between modules in a realistic environment that mimics production.\n", + "- Focus on testing interfaces and data exchange between components.\n", + "- Use real data where possible to simulate actual usage scenarios.\n", + "- Prioritize testing critical integration points that are prone to failure.\n", + "- Automate integration tests to ensure they are run consistently and frequently.\n", + "\n", + "**Examples:**\n", + "\n", + "**Unit Testing Example:**\n", + "- Testing a function that calculates the sum of two numbers. The test would check if the function returns the correct sum for various input values, such as positive numbers, negative numbers, and zero.\n", + "\n", + "**Integration Testing Example:**\n", + "- Testing the interaction between a user authentication module and a database. The test would verify that the authentication module correctly queries the database to validate user credentials and handles various scenarios like successful login, incorrect password, and unregistered email.\n", + "\n", + "In summary, unit testing focuses on individual components in isolation, while integration testing ensures that combined components work together as expected. Both types of testing are crucial for delivering a reliable and robust software application.\n" + ] + } + ], + "source": [ + "# Example 1: Generate Gherkin\n", + "gherkin_result = qa_agent.route_request({\n", + " \"agentType\": \"gherkin\",\n", + " \"requirement\": \"User login functionality with email and password\",\n", + " \"featureName\": \"User Authentication\"\n", + "})\n", + "print(\"=== Gherkin Generation ===\\n\", gherkin_result)\n", + "\n", + "# Example 2: Generate Selenium\n", + "selenium_result = qa_agent.route_request({\n", + " \"agentType\": \"selenium\",\n", + " \"requirement\": \"Test login page with valid credentials\",\n", + " \"testName\": \"test_login_valid\",\n", + " \"language\": \"python\"\n", + "})\n", + "print(\"\\n=== Selenium Generation ===\\n\", selenium_result)\n", + "\n", + "# Example 3: Generate Manual Tests\n", + "manual_result = qa_agent.route_request({\n", + " \"agentType\": \"manual\",\n", + " \"requirement\": \"As a user, I want to login to the application so that I can access my account\"\n", + "})\n", + "print(\"\\n=== Manual Test Generation ===\\n\", manual_result)\n", + "\n", + "# Example 4: Chat Assistance\n", + "chat_result = qa_agent.route_request({\n", + " \"agentType\": \"chat\",\n", + " \"requirement\": \"What is the difference between unit testing and integration testing?\"\n", + "})\n", + "print(\"\\n=== Chat Assistance ===\\n\", chat_result)" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/examples/cookbooks/Praison_AI_Real_Estate_Chatbot.ipynb b/examples/cookbooks/Praison_AI_Real_Estate_Chatbot.ipynb new file mode 100644 index 00000000..ca7c30b0 --- /dev/null +++ b/examples/cookbooks/Praison_AI_Real_Estate_Chatbot.ipynb @@ -0,0 +1,481 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "KoeGA1N7R8G6" + }, + "source": [ + "# Praison AI Real Estate Chatbot" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cwsqbQF0SAcR" + }, + "source": [ + "Interact with a real estate AI assistant powered by PraisonAI and OpenAI.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BH0Y-SB9UjNZ" + }, + "source": [ + "[](https://colab.research.google.com/github/DhivyaBharathy-web/PraisonAI/blob/main/examples/cookbooks/Praison_AI_Real_Estate_Chatbot.ipynb)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "M4lyScgcSIFX" + }, + "source": [ + "## 1. Install Dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "p0UqhMK9TMLx" + }, + "outputs": [], + "source": [ + "!pip install praisonaiagents openai" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XjtPizGWSRuh" + }, + "source": [ + "## 2. Set Your OpenAI API Key" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "FTzcJ7JTTPjp" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# Enter your OpenAI API key here\n", + "OPENAI_API_KEY = \"Enter your api key here\" # <-- Replace with your key\n", + "os.environ[\"OPENAI_API_KEY\"] = OPENAI_API_KEY" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5WIQ76LQSeOT" + }, + "source": [ + "## 3. Create the Praison AI Agent" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "mJYmlRHtTW59" + }, + "outputs": [], + "source": [ + "from praisonaiagents import Agent\n", + "\n", + "praison_agent = Agent(\n", + " name=\"Praison Real Estate Chatbot\",\n", + " role=\"Answer real estate questions and provide helpful advice.\",\n", + " instructions=[\n", + " \"You are a helpful real estate assistant.\",\n", + " \"Answer user questions about buying, selling, or renting property.\",\n", + " \"Provide clear, concise, and friendly advice.\"\n", + " ],\n", + " markdown=True\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wDOYoxf2SlSD" + }, + "source": [ + "## 4. Chat with the Agent" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "caca39e23f66484e941342713956f289", + "a9f33a0ed67440f1aee8c84ee7e71b1d", + "bcc0387223424b45aec4212eae3aff89", + "030f0e16572a40a7b8e100a6228030e3", + "c91fa91cf91c4697ac28756d6bdf2c73", + "08b05be0ee174761974bc10c1d217b53", + "a08f3878570c48f38bfa3a097cb1e4d6", + "58b89df2db0344fe80f29508c55b2939", + "73ced2df95814c068150e9357692f47b", + "9fbf91ecc93f4230beac5dfc0bf734f6" + ] + }, + "id": "zIyEMJJ6TZlb", + "outputId": "817d4df6-ec88-425e-f00b-8ce6b4923e00" + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "caca39e23f66484e941342713956f289", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Text(value='', description='You:', placeholder='Type your real estate question here...')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "030f0e16572a40a7b8e100a6228030e3", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='Ask Praison AI', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a08f3878570c48f38bfa3a097cb1e4d6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 1.7s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 1.7s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Hello! How can I assist you with your real estate needs today? Whether you have questions about buying, โ\n", + "โ selling, or renting property, I'm here to help. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Hello! How can I assist you with your real estate needs today? Whether you have questions about buying, \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m selling, or renting property, I'm here to help. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Praison AI:** Hello! How can I assist you with your real estate needs today? Whether you have questions about buying, selling, or renting property, I'm here to help." + ], + "text/plain": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Praison Real Estate Chatbot โ\n", + "โ Role: Answer real estate questions and provide helpful advice. โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mPraison Real Estate Chatbot\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAnswer real estate questions and provide helpful advice.\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "73ced2df95814c068150e9357692f47b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 6.3s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 6.3s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ What should I look for when buying my first home? โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m What should I look for when buying my first home? \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Buying your first home is an exciting milestone! Here are some key things to consider: โ\n", + "โ โ\n", + "โ 1 Budget and Financing: Determine how much you can afford by reviewing your finances and getting pre-approved โ\n", + "โ for a mortgage. This will help you understand your price range and make your offer more attractive to โ\n", + "โ sellers. โ\n", + "โ 2 Location: Consider the neighborhood and its proximity to work, schools, public transportation, and amenities โ\n", + "โ like shopping and parks. Also, research the area's safety and future development plans. โ\n", + "โ 3 Home Type and Size: Decide what type of home suits your needsโsingle-family, townhouse, condo, etc. Consider โ\n", + "โ the number of bedrooms and bathrooms you need now and in the future. โ\n", + "โ 4 Condition of the Property: Look at the age and condition of the home. Be aware of potential repairs or โ\n", + "โ renovations needed. A home inspection can help identify any major issues. โ\n", + "โ 5 Resale Value: Consider the potential resale value of the home. Factors like location, school districts, and โ\n", + "โ neighborhood development can impact future value. โ\n", + "โ 6 Lifestyle Needs: Think about your lifestyle and how the home fits into it. Consider things like yard space, โ\n", + "โ commute times, and community amenities. โ\n", + "โ 7 Homeowners Association (HOA): If applicable, understand the rules, fees, and restrictions of the HOA. This โ\n", + "โ can impact your living experience and costs. โ\n", + "โ 8 Future Growth: Consider your long-term plans. Will the home accommodate potential family growth or changes โ\n", + "โ in your lifestyle? โ\n", + "โ โ\n", + "โ Taking the time to consider these factors will help you make a well-informed decision. Good luck with your home โ\n", + "โ search! If you have more questions, feel free to ask. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Buying your first home is an exciting milestone! Here are some key things to consider: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mBudget and Financing\u001b[0m: Determine how much you can afford by reviewing your finances and getting pre-approved \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mfor a mortgage. This will help you understand your price range and make your offer more attractive to \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0msellers. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mLocation\u001b[0m: Consider the neighborhood and its proximity to work, schools, public transportation, and amenities \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mlike shopping and parks. Also, research the area's safety and future development plans. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mHome Type and Size\u001b[0m: Decide what type of home suits your needsโsingle-family, townhouse, condo, etc. Consider \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mthe number of bedrooms and bathrooms you need now and in the future. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mCondition of the Property\u001b[0m: Look at the age and condition of the home. Be aware of potential repairs or \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mrenovations needed. A home inspection can help identify any major issues. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 5 \u001b[0m\u001b[1mResale Value\u001b[0m: Consider the potential resale value of the home. Factors like location, school districts, and \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mneighborhood development can impact future value. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 6 \u001b[0m\u001b[1mLifestyle Needs\u001b[0m: Think about your lifestyle and how the home fits into it. Consider things like yard space, \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mcommute times, and community amenities. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 7 \u001b[0m\u001b[1mHomeowners Association (HOA)\u001b[0m: If applicable, understand the rules, fees, and restrictions of the HOA. This \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mcan impact your living experience and costs. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 8 \u001b[0m\u001b[1mFuture Growth\u001b[0m: Consider your long-term plans. Will the home accommodate potential family growth or changes \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0min your lifestyle? \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Taking the time to consider these factors will help you make a well-informed decision. Good luck with your home \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m search! If you have more questions, feel free to ask. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Praison AI:** Buying your first home is an exciting milestone! Here are some key things to consider:\n", + "\n", + "1. **Budget and Financing**: Determine how much you can afford by reviewing your finances and getting pre-approved for a mortgage. This will help you understand your price range and make your offer more attractive to sellers.\n", + "\n", + "2. **Location**: Consider the neighborhood and its proximity to work, schools, public transportation, and amenities like shopping and parks. Also, research the area's safety and future development plans.\n", + "\n", + "3. **Home Type and Size**: Decide what type of home suits your needsโsingle-family, townhouse, condo, etc. Consider the number of bedrooms and bathrooms you need now and in the future.\n", + "\n", + "4. **Condition of the Property**: Look at the age and condition of the home. Be aware of potential repairs or renovations needed. A home inspection can help identify any major issues.\n", + "\n", + "5. **Resale Value**: Consider the potential resale value of the home. Factors like location, school districts, and neighborhood development can impact future value.\n", + "\n", + "6. **Lifestyle Needs**: Think about your lifestyle and how the home fits into it. Consider things like yard space, commute times, and community amenities.\n", + "\n", + "7. **Homeowners Association (HOA)**: If applicable, understand the rules, fees, and restrictions of the HOA. This can impact your living experience and costs.\n", + "\n", + "8. **Future Growth**: Consider your long-term plans. Will the home accommodate potential family growth or changes in your lifestyle?\n", + "\n", + "Taking the time to consider these factors will help you make a well-informed decision. Good luck with your home search! If you have more questions, feel free to ask." + ], + "text/plain": [ + "
โญโ Agent Info โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ ๐ค Agent: Agent โ\n", + "โ Role: Assistant โ\n", + "โ Tools: internet_search_tool โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[38;2;210;227;200mโญโ\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[1;38;2;210;227;200mAgent Info\u001b[0m\u001b[38;2;210;227;200m \u001b[0m\u001b[38;2;210;227;200mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[38;2;210;227;200mโโฎ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;255;155;155m๐ค Agent:\u001b[0m \u001b[38;2;255;229;229mAgent\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;180;180;179mRole:\u001b[0m \u001b[38;2;255;229;229mAssistant\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[1;38;2;134;167;137mTools:\u001b[0m \u001b[3;38;2;180;212;255minternet_search_tool\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโ\u001b[0m \u001b[38;2;210;227;200mโ\u001b[0m\n", + "\u001b[38;2;210;227;200mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4a9625800fe94aabb88e2ff78bce5a1d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Tool Call โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Agent Agent is calling function 'internet_search_tool' with arguments: {'query': 'AI job trends in 2025'} โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Tool Call \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mAgent Agent is calling function 'internet_search_tool' with arguments: {'query': 'AI job trends in 2025'}\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Tool Call โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Function 'internet_search_tool' returned: [{\"title\": \"AI Job Trends 2025: Top AI Jobs, Roles, and Hiring Data โ\n", + "โ Insights\", \"url\": \"https://blog.getaura.ai/ai-job-trends-2025\", \"snippet\": \"Explore the latest AI job trends โ\n", + "โ for 2025. Learn about top industries hiring, in-demand skills, and emerging roles shaping the future of AI โ\n", + "โ hiring.\"}, {\"title\": \" The Fearless Future: 2025 Global AI Jobs Barometer - PwC\", \"url\": โ\n", + "โ \"https://www.pwc.com/gx/en/issues/artificial-intelligence/job-barometer/aijb-2025-united-states-analysis.pdf\", โ\n", + "โ \"snippet\": \"Global Insights The AI Jobs Barometer reveals AI's global impact on jobs, wages, skills, and โ\n", + "โ productivity by examining close to a billion job ads from six continents.\"}, {\"title\": \"10 Hottest AI Jobs Of โ\n", + "โ 2025 With Six-Figure Salaries - Forbes\", \"url\": โ\n", + "โ \"https://www.forbes.com/sites/bryanrobinson/2025/01/17/10-hottest-ai-jobs-of-2025-paying-six-figure-salaries/\", โ\n", + "โ \"snippet\": \"Explore the top AI roles of 2025, from Machine Learning Engineers to NLP Specialists, offering โ\n", + "โ six-figure salaries and high demand in the evolving tech landscape.\"}, {\"title\": \"AI Job Market 2025: Impact on โ\n", + "โ Employment & Future Workforce Trends\", \"url\": โ\n", + "โ \"https://www.cognitivetoday.com/2025/03/ai-job-market-impact-on-employment-future-workforce-trends/\", โ\n", + "โ \"snippet\": \"Discover how AI will reshape jobs in 2025. Learn about AI-driven displacement, new roles, and โ\n", + "โ must-have skills to thrive in the evolving workforce. AI Job Market 2025.\"}, {\"title\": \"AI Job Market: Trends, โ\n", + "โ Opportunities, and Key Skills for 2025\", \"url\": โ\n", + "โ \"https://www.analyticsinsight.net/artificial-intelligence/ai-job-market-trends-opportunities-and-key-skills-for โ\n", + "โ -2025\", \"snippet\": \"As artificial intelligence (AI) continues to reshape industries, the job market will see a โ\n", + "โ significant transformation in 2025. With new opportunities emerging and certain skills becoming essential, AI โ\n", + "โ adoption will also rise. From automation and machine learning to AI-driven healthcare and edge computing, โ\n", + "โ understanding the evolving trends and required skill sets will be crucial for anyone ...\"}] โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Tool Call \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mFunction 'internet_search_tool' returned: [{\"title\": \"AI Job Trends 2025: Top AI Jobs, Roles, and Hiring Data \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mInsights\", \"url\": \"https://blog.getaura.ai/ai-job-trends-2025\", \"snippet\": \"Explore the latest AI job trends \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mfor 2025. Learn about top industries hiring, in-demand skills, and emerging roles shaping the future of AI \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mhiring.\"}, {\"title\": \" The Fearless Future: 2025 Global AI Jobs Barometer - PwC\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.pwc.com/gx/en/issues/artificial-intelligence/job-barometer/aijb-2025-united-states-analysis.pdf\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"snippet\": \"Global Insights The AI Jobs Barometer reveals AI's global impact on jobs, wages, skills, and \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mproductivity by examining close to a billion job ads from six continents.\"}, {\"title\": \"10 Hottest AI Jobs Of \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m2025 With Six-Figure Salaries - Forbes\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.forbes.com/sites/bryanrobinson/2025/01/17/10-hottest-ai-jobs-of-2025-paying-six-figure-salaries/\",\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"snippet\": \"Explore the top AI roles of 2025, from Machine Learning Engineers to NLP Specialists, offering \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36msix-figure salaries and high demand in the evolving tech landscape.\"}, {\"title\": \"AI Job Market 2025: Impact on\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mEmployment & Future Workforce Trends\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.cognitivetoday.com/2025/03/ai-job-market-impact-on-employment-future-workforce-trends/\", \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"snippet\": \"Discover how AI will reshape jobs in 2025. Learn about AI-driven displacement, new roles, and \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mmust-have skills to thrive in the evolving workforce. AI Job Market 2025.\"}, {\"title\": \"AI Job Market: Trends, \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36mOpportunities, and Key Skills for 2025\", \"url\": \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m\"https://www.analyticsinsight.net/artificial-intelligence/ai-job-market-trends-opportunities-and-key-skills-for\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36m-2025\", \"snippet\": \"As artificial intelligence (AI) continues to reshape industries, the job market will see a \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36msignificant transformation in 2025. With new opportunities emerging and certain skills becoming essential, AI \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36madoption will also rise. From automation and machine learning to AI-driven healthcare and edge computing, \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;36munderstanding the evolving trends and required skill sets will be crucial for anyone ...\"}]\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bfb62f3af49c40f7934a7f245cd57d6d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Response generated in 14.7s\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "\u001b[2mResponse generated in 14.7s\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ AI job trends in 2025 โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Task \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m AI job trends in 2025 \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Response โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ Here are some insights into AI job trends for 2025: โ\n", + "โ โ\n", + "โ 1 Top AI Jobs and Roles: The AI job market in 2025 is expected to feature roles such as Machine Learning โ\n", + "โ Engineers, NLP Specialists, and other positions offering six-figure salaries. These roles are in high demand โ\n", + "โ as the tech landscape evolves. Read more on Forbes. โ\n", + "โ 2 Industries and Skills: AI is reshaping industries, with new opportunities emerging and certain skills โ\n", + "โ becoming essential. Key areas include automation, machine learning, AI-driven healthcare, and edge โ\n", + "โ computing. Explore more on Analytics Insight. โ\n", + "โ 3 Global Impact: The AI Jobs Barometer by PwC examines AI's global impact on jobs, wages, skills, and โ\n", + "โ productivity, analyzing job ads from six continents. Check the PwC report. โ\n", + "โ 4 Future Workforce Trends: AI will reshape jobs, leading to AI-driven displacement and the creation of new โ\n", + "โ roles. Understanding these trends and acquiring must-have skills will be crucial for thriving in the โ\n", + "โ evolving workforce. Learn more on Cognitive Today. โ\n", + "โ 5 Hiring Data Insights: Insights into the latest AI job trends, including top industries hiring and emerging โ\n", + "โ roles, can be found in various reports and analyses. Read more on GetAura. โ\n", + "โ โ\n", + "โ These resources provide a comprehensive overview of the anticipated changes and opportunities in the AI job โ\n", + "โ market by 2025. โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Response \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m Here are some insights into AI job trends for 2025: \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 1 \u001b[0m\u001b[1mTop AI Jobs and Roles\u001b[0m: The AI job market in 2025 is expected to feature roles such as Machine Learning \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mEngineers, NLP Specialists, and other positions offering six-figure salaries. These roles are in high demand \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mas the tech landscape evolves. \u001b]8;id=1080;https://www.forbes.com/sites/bryanrobinson/2025/01/17/10-hottest-ai-jobs-of-2025-paying-six-figure-salaries/\u001b\\\u001b[4;34mRead more on Forbes\u001b[0m\u001b]8;;\u001b\\. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 2 \u001b[0m\u001b[1mIndustries and Skills\u001b[0m: AI is reshaping industries, with new opportunities emerging and certain skills \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mbecoming essential. Key areas include automation, machine learning, AI-driven healthcare, and edge \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mcomputing. \u001b]8;id=337875;https://www.analyticsinsight.net/artificial-intelligence/ai-job-market-trends-opportunities-and-key-skills-for-2025\u001b\\\u001b[4;34mExplore more on Analytics Insight\u001b[0m\u001b]8;;\u001b\\. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 3 \u001b[0m\u001b[1mGlobal Impact\u001b[0m: The AI Jobs Barometer by PwC examines AI's global impact on jobs, wages, skills, and \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mproductivity, analyzing job ads from six continents. \u001b]8;id=455296;https://www.pwc.com/gx/en/issues/artificial-intelligence/job-barometer/aijb-2025-united-states-analysis.pdf\u001b\\\u001b[4;34mCheck the PwC report\u001b[0m\u001b]8;;\u001b\\. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 4 \u001b[0m\u001b[1mFuture Workforce Trends\u001b[0m: AI will reshape jobs, leading to AI-driven displacement and the creation of new \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mroles. Understanding these trends and acquiring must-have skills will be crucial for thriving in the \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mevolving workforce. \u001b]8;id=772466;https://www.cognitivetoday.com/2025/03/ai-job-market-impact-on-employment-future-workforce-trends/\u001b\\\u001b[4;34mLearn more on Cognitive Today\u001b[0m\u001b]8;;\u001b\\. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m 5 \u001b[0m\u001b[1mHiring Data Insights\u001b[0m: Insights into the latest AI job trends, including top industries hiring and emerging \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;33m \u001b[0mroles, can be found in various reports and analyses. \u001b]8;id=262366;https://blog.getaura.ai/ai-job-trends-2025\u001b\\\u001b[4;34mRead more on GetAura\u001b[0m\u001b]8;;\u001b\\. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m These resources provide a comprehensive overview of the anticipated changes and opportunities in the AI job \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m market by 2025. \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Response:\n", + "Here are some insights into AI job trends for 2025:\n", + "\n", + "1. **Top AI Jobs and Roles**: The AI job market in 2025 is expected to feature roles such as Machine Learning Engineers, NLP Specialists, and other positions offering six-figure salaries. These roles are in high demand as the tech landscape evolves. [Read more on Forbes](https://www.forbes.com/sites/bryanrobinson/2025/01/17/10-hottest-ai-jobs-of-2025-paying-six-figure-salaries/).\n", + "\n", + "2. **Industries and Skills**: AI is reshaping industries, with new opportunities emerging and certain skills becoming essential. Key areas include automation, machine learning, AI-driven healthcare, and edge computing. [Explore more on Analytics Insight](https://www.analyticsinsight.net/artificial-intelligence/ai-job-market-trends-opportunities-and-key-skills-for-2025).\n", + "\n", + "3. **Global Impact**: The AI Jobs Barometer by PwC examines AI's global impact on jobs, wages, skills, and productivity, analyzing job ads from six continents. [Check the PwC report](https://www.pwc.com/gx/en/issues/artificial-intelligence/job-barometer/aijb-2025-united-states-analysis.pdf).\n", + "\n", + "4. **Future Workforce Trends**: AI will reshape jobs, leading to AI-driven displacement and the creation of new roles. Understanding these trends and acquiring must-have skills will be crucial for thriving in the evolving workforce. [Learn more on Cognitive Today](https://www.cognitivetoday.com/2025/03/ai-job-market-impact-on-employment-future-workforce-trends/).\n", + "\n", + "5. **Hiring Data Insights**: Insights into the latest AI job trends, including top industries hiring and emerging roles, can be found in various reports and analyses. [Read more on GetAura](https://blog.getaura.ai/ai-job-trends-2025).\n", + "\n", + "These resources provide a comprehensive overview of the anticipated changes and opportunities in the AI job market by 2025.\n" + ] + } + ], + "source": [ + "from praisonaiagents import Agent\n", + "\n", + "agent = Agent(\n", + " instructions=\"You are an AI assistant with internet search capabilities.\",\n", + " tools=[internet_search_tool]\n", + ")\n", + "\n", + "# Main: Ask a question\n", + "query = 'AI job trends in 2025' # You can change this prompt\n", + "response = agent.start(query)\n", + "print('Response:')\n", + "print(response)" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}