@@ -7,9 +7,143 @@ class Price(BaseModel):
7
7
high : float
8
8
low : float
9
9
volume : int
10
- time : str = \"N/A \" # Fallback value for missing calendar_date
10
+ time : str
11
11
12
12
13
13
class PriceResponse (BaseModel ):
14
14
ticker : str
15
15
prices : list [Price ]
16
+
17
+
18
+ class FinancialMetrics (BaseModel ):
19
+ ticker : str
20
+ report_period : str
21
+ period : str
22
+ currency : str
23
+ market_cap : float | None
24
+ enterprise_value : float | None
25
+ price_to_earnings_ratio : float | None
26
+ price_to_book_ratio : float | None
27
+ price_to_sales_ratio : float | None
28
+ enterprise_value_to_ebitda_ratio : float | None
29
+ enterprise_value_to_revenue_ratio : float | None
30
+ free_cash_flow_yield : float | None
31
+ peg_ratio : float | None
32
+ gross_margin : float | None
33
+ operating_margin : float | None
34
+ net_margin : float | None
35
+ return_on_equity : float | None
36
+ return_on_assets : float | None
37
+ return_on_invested_capital : float | None
38
+ asset_turnover : float | None
39
+ inventory_turnover : float | None
40
+ receivables_turnover : float | None
41
+ days_sales_outstanding : float | None
42
+ operating_cycle : float | None
43
+ working_capital_turnover : float | None
44
+ current_ratio : float | None
45
+ quick_ratio : float | None
46
+ cash_ratio : float | None
47
+ operating_cash_flow_ratio : float | None
48
+ debt_to_equity : float | None
49
+ debt_to_assets : float | None
50
+ interest_coverage : float | None
51
+ revenue_growth : float | None
52
+ earnings_growth : float | None
53
+ book_value_growth : float | None
54
+ earnings_per_share_growth : float | None
55
+ free_cash_flow_growth : float | None
56
+ operating_income_growth : float | None
57
+ ebitda_growth : float | None
58
+ payout_ratio : float | None
59
+ earnings_per_share : float | None
60
+ book_value_per_share : float | None
61
+ free_cash_flow_per_share : float | None
62
+
63
+
64
+ class FinancialMetricsResponse (BaseModel ):
65
+ financial_metrics : list [FinancialMetrics ]
66
+
67
+
68
+ class LineItem (BaseModel ):
69
+ ticker : str
70
+ report_period : str
71
+ period : str
72
+ currency : str
73
+
74
+ # Allow additional fields dynamically
75
+ model_config = {"extra" : "allow" }
76
+
77
+
78
+ class LineItemResponse (BaseModel ):
79
+ search_results : list [LineItem ]
80
+
81
+
82
+ class InsiderTrade (BaseModel ):
83
+ ticker : str
84
+ issuer : str | None
85
+ name : str | None
86
+ title : str | None
87
+ is_board_director : bool | None
88
+ transaction_date : str | None
89
+ transaction_shares : float | None
90
+ transaction_price_per_share : float | None
91
+ transaction_value : float | None
92
+ shares_owned_before_transaction : float | None
93
+ shares_owned_after_transaction : float | None
94
+ security_title : str | None
95
+ filing_date : str
96
+
97
+
98
+ class InsiderTradeResponse (BaseModel ):
99
+ insider_trades : list [InsiderTrade ]
100
+
101
+
102
+ class CompanyNews (BaseModel ):
103
+ ticker : str
104
+ title : str
105
+ author : str
106
+ source : str
107
+ date : str
108
+ url : str
109
+ sentiment : str | None = None
110
+
111
+
112
+ class CompanyNewsResponse (BaseModel ):
113
+ news : list [CompanyNews ]
114
+
115
+
116
+ class Position (BaseModel ):
117
+ cash : float = 0.0
118
+ shares : int = 0
119
+ ticker : str
120
+
121
+
122
+ class Portfolio (BaseModel ):
123
+ positions : dict [str , Position ] # ticker -> Position mapping
124
+ total_cash : float = 0.0
125
+
126
+
127
+ class AnalystSignal (BaseModel ):
128
+ signal : str | None = None
129
+ confidence : float | None = None
130
+ reasoning : dict | str | None = None
131
+ max_position_size : float | None = None # For risk management signals
132
+
133
+
134
+ class TickerAnalysis (BaseModel ):
135
+ ticker : str
136
+ analyst_signals : dict [str , AnalystSignal ] # agent_name -> signal mapping
137
+
138
+
139
+ class AgentStateData (BaseModel ):
140
+ tickers : list [str ]
141
+ portfolio : Portfolio
142
+ start_date : str
143
+ end_date : str
144
+ ticker_analyses : dict [str , TickerAnalysis ] # ticker -> analysis mapping
145
+
146
+
147
+ class AgentStateMetadata (BaseModel ):
148
+ show_reasoning : bool = False
149
+ model_config = {"extra" : "allow" }
0 commit comments