{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "42ec1713", "metadata": {}, "outputs": [], "source": [ "import gradio as gr\n", "from deal_agent_framework import DealAgentFramework\n", "from agents.deals import Opportunity, Deal" ] }, { "cell_type": "code", "execution_count": 3, "id": "29dfdb7b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running on local URL: http://127.0.0.1:7860\n", "\n", "To create a public link, set `share=True` in `launch()`.\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with gr.Blocks(title=\"The Price is Right\", fill_width=True) as ui:\n", "\n", " with gr.Row():\n", " gr.Markdown('
The Price is Right - Deal Hunting Agentic AI
')\n", " with gr.Row():\n", " gr.Markdown('
Autonomous agent framework that finds online deals, collaborating with a proprietary fine-tuned LLM deployed on Modal, and a RAG pipeline with a frontier model and Chroma.
')\n", " \n", "\n", "ui.launch(inbrowser=True)" ] }, { "cell_type": "code", "execution_count": 5, "id": "a131dd88", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running on local URL: http://127.0.0.1:7861\n", "\n", "To create a public link, set `share=True` in `launch()`.\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with gr.Blocks(title=\"The Price is Right\", fill_width=True) as ui:\n", "\n", " # Sample deal to populate initially\n", " initial_deal = Deal(\n", " product_description=\"Example description\",\n", " price=100.0,\n", " url=\"https://cnn.com\"\n", " )\n", " initial_opportunity = Opportunity(\n", " deal=initial_deal,\n", " estimate=200.0,\n", " discount=100.0\n", " )\n", " opportunities = gr.State([initial_opportunity])\n", "\n", " def get_table(opps):\n", " return [\n", " [opp.deal.product_description, opp.deal.price, opp.estimate, opp.discount, opp.deal.url]\n", " for opp in opps\n", " ]\n", "\n", " with gr.Row():\n", " gr.Markdown('
\"The Price is Right\" - Deal Hunting Agentic AI
')\n", " with gr.Row():\n", " gr.Markdown('
Deals surfaced so far:
')\n", "\n", " # Scrollable table container using HTML\n", " with gr.Row():\n", " gr.HTML(\"
\")\n", " opportunities_dataframe = gr.Dataframe(\n", " headers=[\"Description\", \"Price\", \"Estimate\", \"Discount\", \"URL\"],\n", " wrap=True,\n", " column_widths=[4, 1, 1, 1, 2],\n", " row_count=10,\n", " col_count=5\n", " )\n", " gr.HTML(\"
\")\n", "\n", " ui.load(get_table, inputs=[opportunities], outputs=[opportunities_dataframe])\n", "\n", "ui.launch(inbrowser=True)" ] }, { "cell_type": "code", "execution_count": null, "id": "250e4890", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[44m\u001b[37m[Agent Framework] Initializing Agent Framework\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[44m\u001b[37m[Agent Framework] Initializing Agent Framework\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[32m[Planning Agent] Planning Agent is initializing\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[32m[Planning Agent] Planning Agent is initializing\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[36m[Scanner Agent] Scanner Agent is initializing\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[36m[Scanner Agent] Scanner Agent is initializing\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[36m[Scanner Agent] Scanner Agent is ready\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[36m[Scanner Agent] Scanner Agent is ready\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[33m[Ensemble Agent] Initializing Ensemble Agent\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[33m[Ensemble Agent] Initializing Ensemble Agent\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[31m[Specialist Agent] Specialist Agent is initializing - connecting to modal\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[31m[Specialist Agent] Specialist Agent is initializing - connecting to modal\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[31m[Specialist Agent] Specialist Agent is ready\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[31m[Specialist Agent] Specialist Agent is ready\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[34m[Frontier Agent] Initializing Frontier Agent\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[34m[Frontier Agent] Initializing Frontier Agent\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[34m[Frontier Agent] Frontier Agent is set up with Groq\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] \u001b[40m\u001b[34m[Frontier Agent] Frontier Agent is set up with Groq\u001b[0m\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] Use pytorch device_name: cpu\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] Use pytorch device_name: cpu\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] Load pretrained SentenceTransformer: sentence-transformers/all-MiniLM-L6-v2\n", "[2025-05-28 21:22:00 +0530] [Agents] [INFO] Load pretrained SentenceTransformer: sentence-transformers/all-MiniLM-L6-v2\n", "[2025-05-28 21:22:05 +0530] [Agents] [INFO] \u001b[40m\u001b[34m[Frontier Agent] Frontier Agent is ready\u001b[0m\n", "[2025-05-28 21:22:05 +0530] [Agents] [INFO] \u001b[40m\u001b[34m[Frontier Agent] Frontier Agent is ready\u001b[0m\n", "[2025-05-28 21:22:05 +0530] [Agents] [INFO] \u001b[40m\u001b[35m[Random Forest Agent] Random Forest Agent is initializing\u001b[0m\n", "[2025-05-28 21:22:05 +0530] [Agents] [INFO] \u001b[40m\u001b[35m[Random Forest Agent] Random Forest Agent is initializing\u001b[0m\n", "[2025-05-28 21:22:05 +0530] [Agents] [INFO] Use pytorch device_name: cpu\n", "[2025-05-28 21:22:05 +0530] [Agents] [INFO] Use pytorch device_name: cpu\n", "[2025-05-28 21:22:05 +0530] [Agents] [INFO] Load pretrained SentenceTransformer: sentence-transformers/all-MiniLM-L6-v2\n", "[2025-05-28 21:22:05 +0530] [Agents] [INFO] Load pretrained SentenceTransformer: sentence-transformers/all-MiniLM-L6-v2\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[40m\u001b[35m[Random Forest Agent] Random Forest Agent is ready\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[40m\u001b[35m[Random Forest Agent] Random Forest Agent is ready\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[40m\u001b[33m[Ensemble Agent] Ensemble Agent is ready\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[40m\u001b[33m[Ensemble Agent] Ensemble Agent is ready\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[40m\u001b[37m[Messaging Agent] Messaging Agent is initializing\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[40m\u001b[37m[Messaging Agent] Messaging Agent is initializing\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[40m\u001b[37m[Messaging Agent] Messaging Agent has initialized Pushover\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[40m\u001b[37m[Messaging Agent] Messaging Agent has initialized Pushover\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[40m\u001b[32m[Planning Agent] Planning Agent is ready\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[40m\u001b[32m[Planning Agent] Planning Agent is ready\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[44m\u001b[37m[Agent Framework] Agent Framework is ready\u001b[0m\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] \u001b[44m\u001b[37m[Agent Framework] Agent Framework is ready\u001b[0m\n", "Running on local URL: http://127.0.0.1:7862\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] HTTP Request: GET http://127.0.0.1:7862/startup-events \"HTTP/1.1 200 OK\"\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] HTTP Request: GET http://127.0.0.1:7862/startup-events \"HTTP/1.1 200 OK\"\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] HTTP Request: HEAD http://127.0.0.1:7862/ \"HTTP/1.1 200 OK\"\n", "[2025-05-28 21:22:11 +0530] [Agents] [INFO] HTTP Request: HEAD http://127.0.0.1:7862/ \"HTTP/1.1 200 OK\"\n", "\n", "To create a public link, set `share=True` in `launch()`.\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "[2025-05-28 21:22:12 +0530] [Agents] [INFO] HTTP Request: GET https://api.gradio.app/pkg-version \"HTTP/1.1 200 OK\"\n", "[2025-05-28 21:22:12 +0530] [Agents] [INFO] HTTP Request: GET https://api.gradio.app/pkg-version \"HTTP/1.1 200 OK\"\n" ] } ], "source": [ "agent_framework = DealAgentFramework()\n", "agent_framework.init_agents_as_needed()\n", "\n", "with gr.Blocks(title=\"The Price is Right\", fill_width=True) as ui:\n", "\n", " initial_deal = Deal(product_description=\"Example description\", price=100.0, url=\"https://cnn.com\")\n", " initial_opportunity = Opportunity(deal=initial_deal, estimate=200.0, discount=100.0)\n", " opportunities = gr.State([initial_opportunity])\n", "\n", " def get_table(opps):\n", " return [[opp.deal.product_description, opp.deal.price, opp.estimate, opp.discount, opp.deal.url] for opp in opps]\n", "\n", " def do_select(opportunities, selected_index: gr.SelectData):\n", " row = selected_index.index[0]\n", " opportunity = opportunities[row]\n", " agent_framework.planner.messenger.alert(opportunity)\n", "\n", " with gr.Row():\n", " gr.Markdown('
\"The Price is Right\" - Deal Hunting Agentic AI
')\n", "\n", " with gr.Row():\n", " gr.Markdown('
Deals surfaced so far:
')\n", "\n", " with gr.Row():\n", " gr.HTML(\"
\")\n", " opportunities_dataframe = gr.Dataframe(\n", " headers=[\"Description\", \"Price\", \"Estimate\", \"Discount\", \"URL\"],\n", " wrap=True,\n", " column_widths=[4, 1, 1, 1, 2],\n", " row_count=10,\n", " col_count=5\n", " )\n", " gr.HTML(\"
\")\n", "\n", " ui.load(get_table, inputs=[opportunities], outputs=[opportunities_dataframe])\n", " opportunities_dataframe.select(do_select, inputs=[opportunities], outputs=[])\n", "\n", "ui.launch(inbrowser=True)" ] }, { "cell_type": "code", "execution_count": null, "id": "1cb83e9b", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.22" } }, "nbformat": 4, "nbformat_minor": 5 }