Spaces:
Running
Running
File size: 1,286 Bytes
8366946 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
"""Handles the integration of XGBoost model with Modal to predict item prices."""
import modal
from src.agents.base_agent import Agent
from src.modal_services.app_config import APP_NAME
class XGBoostPriceAgent(Agent):
"""XGBoostPriceAgent connects to a remote Modal container.
Uses E5 and XGBoost to predict prices from descriptions.
"""
name = "XGBPrice Agent"
color = "yellow"
def __init__(self) -> None:
"""Initialize the agent."""
self._modal_called = False
remote_xgb_pricer = modal.Cls.from_name(APP_NAME, "XGBPricer")
self.xgb = remote_xgb_pricer()
self.log("is ready")
def price(self, description: str) -> float:
"""Call the remote XGBPricer to estimate price."""
if not self._modal_called:
self.log("📡 Connecting to Modal — loading XGBoost and embedding model...")
self._modal_called = True
try:
result = self.xgb.price.remote(description)
# self.log(f"predicting ${result:.2f} ✅")
return result
except Exception as e:
self.log(f"[ERROR] Remote XGBPricer failed: {e}")
raise RuntimeError(
"XGBoostPriceAgent failed to get price from Modal."
) from e
|