feat(week8): add ensemble-joshua assignment (API, Modal, agents); omit large RF model
This commit is contained in:
75
week8/community_contributions/ensemble-joshua/api.py
Normal file
75
week8/community_contributions/ensemble-joshua/api.py
Normal file
@@ -0,0 +1,75 @@
|
||||
from fastapi import FastAPI, HTTPException
|
||||
from pydantic import BaseModel
|
||||
import os
|
||||
import chromadb
|
||||
|
||||
from agents.specialist_agent import SpecialistAgent
|
||||
from agents.frontier_agent import FrontierAgent
|
||||
from agents.random_forest_agent import RandomForestAgent
|
||||
from agents.ensemble_agent import EnsembleAgent
|
||||
from deal_agent_framework import DealAgentFramework
|
||||
|
||||
|
||||
class PriceRequest(BaseModel):
|
||||
description: str
|
||||
|
||||
|
||||
class DealScanResponse(BaseModel):
|
||||
opportunities: list
|
||||
|
||||
|
||||
DB_PATH = os.path.join(os.path.dirname(__file__), "../../products_vectorstore")
|
||||
client = chromadb.PersistentClient(path=DB_PATH)
|
||||
collection = client.get_or_create_collection("products")
|
||||
|
||||
app = FastAPI(title="Week8 Pricer API", version="1.0.0")
|
||||
|
||||
|
||||
@app.get("/healthz")
|
||||
def healthz():
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
@app.post("/price/specialist")
|
||||
def price_specialist(body: PriceRequest):
|
||||
if not body.description:
|
||||
raise HTTPException(400, "description is required")
|
||||
agent = SpecialistAgent()
|
||||
price = float(agent.price(body.description))
|
||||
return {"price": price, "agent": "specialist"}
|
||||
|
||||
|
||||
@app.post("/price/frontier")
|
||||
def price_frontier(body: PriceRequest):
|
||||
if not body.description:
|
||||
raise HTTPException(400, "description is required")
|
||||
agent = FrontierAgent(collection)
|
||||
price = float(agent.price(body.description))
|
||||
return {"price": price, "agent": "frontier"}
|
||||
|
||||
|
||||
@app.post("/price/random_forest")
|
||||
def price_random_forest(body: PriceRequest):
|
||||
if not body.description:
|
||||
raise HTTPException(400, "description is required")
|
||||
agent = RandomForestAgent()
|
||||
price = float(agent.price(body.description))
|
||||
return {"price": price, "agent": "random_forest"}
|
||||
|
||||
|
||||
@app.post("/price/ensemble")
|
||||
def price_ensemble(body: PriceRequest):
|
||||
if not body.description:
|
||||
raise HTTPException(400, "description is required")
|
||||
agent = EnsembleAgent(collection)
|
||||
price = float(agent.price(body.description))
|
||||
return {"price": price, "agent": "ensemble"}
|
||||
|
||||
|
||||
@app.post("/deals/scan")
|
||||
def deals_scan():
|
||||
framework = DealAgentFramework()
|
||||
opportunities = framework.run()
|
||||
return {"count": len(opportunities), "opportunities": [o.dict() for o in opportunities]}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user