Skip to content

Commit 5c9429a

Browse files
authored
Update models.py
1 parent 9945005 commit 5c9429a

File tree

1 file changed

+135
-1
lines changed

1 file changed

+135
-1
lines changed

src/data/models.py

+135-1
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,143 @@ class Price(BaseModel):
77
high: float
88
low: float
99
volume: int
10-
time: str = \"N/A\" # Fallback value for missing calendar_date
10+
time: str
1111

1212

1313
class PriceResponse(BaseModel):
1414
ticker: str
1515
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

Comments
 (0)