Spaces:
Running
Running
| from agents.base import Agent, FALLBACK_DECISION | |
| from llm.prompts import ( | |
| TRADER_SYSTEM, | |
| build_trader_prompt_A, | |
| build_trader_prompt_B, | |
| build_trader_prompt_C, | |
| ) | |
| class Trader(Agent): | |
| def __init__(self, llm_client, benchmark: str = "A"): | |
| super().__init__("Trader", TRADER_SYSTEM, llm_client) | |
| self.benchmark = benchmark | |
| def build_prompt(self, context: dict) -> str: | |
| if self.benchmark == "A": | |
| return build_trader_prompt_A(context) | |
| if self.benchmark == "B": | |
| return build_trader_prompt_B( | |
| context.get("tech_analysis", {}), | |
| context.get("news_analysis", {}), | |
| context.get("portfolio", {}), | |
| context.get("asset", "BTC/USDT"), | |
| context.get("current_price", 0), | |
| ) | |
| if self.benchmark == "C": | |
| return build_trader_prompt_C( | |
| context.get("research", {}), | |
| context.get("risk_decision", {}), | |
| context.get("portfolio", {}), | |
| context.get("asset", "BTC/USDT"), | |
| context.get("current_price", 0), | |
| ) | |
| return build_trader_prompt_A(context) | |
| def parse(self, raw: str) -> dict: | |
| result = super().parse(raw) | |
| # Validate and normalize | |
| action = result.get("action", "HOLD").upper() | |
| if action not in ("BUY", "SELL", "HOLD"): | |
| action = "HOLD" | |
| size = float(result.get("size", 0.5)) | |
| size = max(0.0, min(1.0, size)) | |
| confidence = float(result.get("confidence", 0.5)) | |
| confidence = max(0.0, min(1.0, confidence)) | |
| return { | |
| "action": action, | |
| "size": size, | |
| "confidence": confidence, | |
| "reason": str(result.get("reason", "")), | |
| } | |