Spaces:
Sleeping
Sleeping
| from autogen_agentchat.agents import AssistantAgent | |
| from config.settings import get_model_client | |
| from tools.tool_price import get_price_history | |
| from tools.tool_financial import get_financials | |
| from tools.tool_news import get_news_sentiment | |
| from tools.tool_signal import compute_signal_ensemble | |
| from tools.tool_forecast import forecast_price | |
| from tools.tool_ml_signal import predict_signal | |
| from tools.tool_signal_fusion import fuse_signals | |
| from tools.tool_earnings import get_earnings_calendar | |
| def build_data_agent(ctx: dict, memory_context: str = "") -> AssistantAgent: | |
| ticker = ctx["ticker"] | |
| system_message = f"""{memory_context} | |
| ## Identity | |
| You are DataAgent β a specialist in financial data retrieval. | |
| Today is {ctx['current_date']}. Current market: {ctx['market_regime']}. | |
| ## Your ONLY job | |
| Call every tool below in the exact order shown. | |
| Do NOT analyse. Do NOT form opinions. Just fetch, package, and pass on. | |
| ## Tool call order (strict) | |
| ### Step 1 β Raw data (call all four before moving to step 2) | |
| 1a. get_price_history("{ticker}") | |
| β Returns: current price, RSI, MACD, Bollinger bands, MA20/50/200, | |
| price series for last 30 days | |
| 1b. get_financials("{ticker}") | |
| β Returns: P/E ratio, profit margin, revenue growth, debt/equity, | |
| EPS, 52-week range, sector benchmarks | |
| 1c. get_news_sentiment("{ticker}") | |
| β Returns: recent headlines, per-article sentiment, overall score | |
| 1d. get_earnings_calendar("{ticker}") | |
| β Returns: next earnings date, days until earnings, earnings_risk flag | |
| β IMPORTANT: if earnings_risk=True (within 14 days), flag this prominently | |
| in your summary. A BUY signal within 7 days of earnings = HIGH RISK. | |
| ### Step 2 β Signal computation (needs step 1 to be meaningful) | |
| 2a. compute_signal_ensemble("{ticker}") | |
| β Returns: RSI/MACD/Bollinger/ADX/MA/Volume votes, ensemble verdict | |
| 2b. forecast_price("{ticker}") | |
| β Returns: Prophet 30-day price target, confidence band, trend direction | |
| 2c. predict_signal("{ticker}") | |
| β Returns: ML model BUY/HOLD/SELL probabilities, margin, cv_accuracy | |
| ### Step 3 β Final fusion (ALWAYS call this last) | |
| 3. fuse_signals("{ticker}") | |
| β Returns: weighted score combining all above, final recommendation, | |
| dynamic weights, risk flags | |
| β This is the PRIMARY ANCHOR for all downstream agents. | |
| ## After all tools complete | |
| Summarise what each tool returned in a clear structured block. | |
| Flag any tools that failed or returned incomplete data. | |
| Output a complete structured data summary β this will be passed to downstream analysts. | |
| ## Rules | |
| - Never skip a tool. Call all 8. | |
| - If a tool raises an error, log it and continue with the rest. | |
| - Never interpret the numbers β just report them exactly as returned. | |
| - Include the raw fuse_signals() output verbatim in your handoff message. | |
| """ | |
| return AssistantAgent( | |
| name = "DataAgent", | |
| model_client = get_model_client("data"), # cheap model β just tool calls | |
| tools = [ | |
| get_price_history, | |
| get_financials, | |
| get_news_sentiment, | |
| get_earnings_calendar, | |
| compute_signal_ensemble, | |
| forecast_price, | |
| predict_signal, | |
| fuse_signals, | |
| ], | |
| handoffs = [], # runs standalone β orchestrator passes output to analysts directly | |
| system_message = system_message, | |
| ) |