From a53784344df2de91a6d921cb49d12ddfb43f5824 Mon Sep 17 00:00:00 2001 From: Clayton Brown Date: Mon, 20 Apr 2026 23:28:33 +1000 Subject: [PATCH] feat(024): define AgentInput and AgentOutput schemas --- tradingagents/agents/__init__.py | 4 +++ tradingagents/agents/utils/schemas.py | 36 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 tradingagents/agents/utils/schemas.py diff --git a/tradingagents/agents/__init__.py b/tradingagents/agents/__init__.py index 1f03642c..26aca721 100644 --- a/tradingagents/agents/__init__.py +++ b/tradingagents/agents/__init__.py @@ -1,6 +1,7 @@ from .utils.agent_utils import create_msg_delete from .utils.agent_states import AgentState, InvestDebateState, RiskDebateState from .utils.memory import FinancialSituationMemory +from .utils.schemas import AgentInput, AgentOutput, PriceTargets from .analysts.fundamentals_analyst import create_fundamentals_analyst from .analysts.market_analyst import create_market_analyst @@ -22,6 +23,9 @@ from .trader.trader import create_trader __all__ = [ "FinancialSituationMemory", "AgentState", + "AgentInput", + "AgentOutput", + "PriceTargets", "create_msg_delete", "InvestDebateState", "RiskDebateState", diff --git a/tradingagents/agents/utils/schemas.py b/tradingagents/agents/utils/schemas.py new file mode 100644 index 00000000..dc8f967f --- /dev/null +++ b/tradingagents/agents/utils/schemas.py @@ -0,0 +1,36 @@ +"""Standardized input/output schemas for the generic agent interface.""" + +from __future__ import annotations + +from typing import Literal + +from pydantic import BaseModel, Field + + +class AgentInput(BaseModel): + """Standardized input contract for any trading agent.""" + + ticker: str + date: str + context: dict[str, str] = Field( + default_factory=dict, + description="Optional context keyed by: market_data, news, fundamentals, sentiment, technical_indicators", + ) + + +class PriceTargets(BaseModel): + """Entry, target, and stop-loss price levels.""" + + entry: float + target: float + stop_loss: float + + +class AgentOutput(BaseModel): + """Standardized output contract for any trading agent.""" + + rating: Literal["BUY", "OVERWEIGHT", "HOLD", "UNDERWEIGHT", "SELL"] + confidence: float = Field(ge=0.0, le=1.0) + price_targets: PriceTargets | None = None + thesis: str + risk_factors: list[str] = Field(default_factory=list)