File size: 1,237 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
"""FTPriceAgent uses a remote fine-tuned LLM on Modal.

Predicts item prices from descriptions.
"""

import modal

from src.agents.base_agent import Agent
from src.modal_services.app_config import APP_NAME


class FTPriceAgent(Agent):
    """Agent for running a fine-tuned LLM remotely."""

    name = "FTPrice Agent"
    color = "red"

    def __init__(self) -> None:
        """Initialize agent with Modal class instance."""
        self._modal_called = False
        ft_pricer = modal.Cls.from_name(APP_NAME, "FTPricer")
        self.ftpricer = ft_pricer()
        self.log("is ready")

    def price(self, description: str) -> float:
        """Remote call to estimate price, with error handling."""
        if not self._modal_called:
            self.log("🧠 Calling Modal's fine-tuned LLM...")
            self._modal_called = True
        try:
            result = self.ftpricer.price.remote(
                description
            )  # 2nd API call: run price method
            # self.log(f"predicting ${result:.2f} ✅")
            return result
        except Exception as e:
            self.log(f"[ERROR] Remote pricing failed: {e}")
            raise RuntimeError("FTPriceAgent failed to get price from Modal.") from e