61 lines
2.5 KiB
Python
61 lines
2.5 KiB
Python
import gradio as gr
|
|
from deal_agent_framework import DealAgentFramework
|
|
from agents.deals import Opportunity, Deal
|
|
|
|
class App:
|
|
|
|
def __init__(self):
|
|
self.agent_framework = None
|
|
|
|
def run(self):
|
|
with gr.Blocks(title="The Price is Right", fill_width=True) as ui:
|
|
|
|
def table_for(opps):
|
|
return [[opp.deal.product_description, f"${opp.deal.price:.2f}", f"${opp.estimate:.2f}", f"${opp.discount:.2f}", opp.deal.url] for opp in opps]
|
|
|
|
def start():
|
|
self.agent_framework = DealAgentFramework()
|
|
self.agent_framework.init_agents_as_needed()
|
|
opportunities = self.agent_framework.memory
|
|
table = table_for(opportunities)
|
|
return table
|
|
|
|
def go():
|
|
self.agent_framework.run()
|
|
new_opportunities = self.agent_framework.memory
|
|
table = table_for(new_opportunities)
|
|
return table
|
|
|
|
def do_select(selected_index: gr.SelectData):
|
|
opportunities = self.agent_framework.memory
|
|
row = selected_index.index[0]
|
|
opportunity = opportunities[row]
|
|
self.agent_framework.planner.messenger.alert(opportunity)
|
|
|
|
with gr.Row():
|
|
gr.Markdown('<div style="text-align: center;font-size:24px">"The Price is Right" - Deal Hunting Agentic AI</div>')
|
|
with gr.Row():
|
|
gr.Markdown('<div style="text-align: center;font-size:14px">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.</div>')
|
|
with gr.Row():
|
|
gr.Markdown('<div style="text-align: center;font-size:14px">Deals surfaced so far:</div>')
|
|
with gr.Row():
|
|
opportunities_dataframe = gr.Dataframe(
|
|
headers=["Description", "Price", "Estimate", "Discount", "URL"],
|
|
wrap=True,
|
|
column_widths=[4, 1, 1, 1, 2],
|
|
row_count=10,
|
|
col_count=5
|
|
)
|
|
|
|
ui.load(start, inputs=[], outputs=[opportunities_dataframe])
|
|
|
|
timer = gr.Timer(value=60)
|
|
timer.tick(go, inputs=[], outputs=[opportunities_dataframe])
|
|
|
|
opportunities_dataframe.select(do_select)
|
|
|
|
ui.launch(share=False, inbrowser=True)
|
|
|
|
if __name__=="__main__":
|
|
App().run()
|
|
|