Skip to content

Commit 9efa4ef

Browse files
authored
Merge pull request #10 from ApexAILabs/feature/multi-asset-allocation
Feature/multi-asset-allocation
2 parents b2d22e3 + 9069a55 commit 9efa4ef

6 files changed

Lines changed: 35 additions & 20 deletions

File tree

src/tradegraph_financial_advisor/agents/financial_agent.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ async def execute(self, input_data: Dict[str, Any]) -> Dict[str, Any]:
6262
else:
6363
market_data = await self._get_equity_market_data(symbol)
6464
symbol_data["market_data"] = (
65-
market_data.dict() if market_data else None
65+
market_data.model_dump() if market_data else None
6666
)
6767

6868
if include_financials:
@@ -73,7 +73,7 @@ async def execute(self, input_data: Dict[str, Any]) -> Dict[str, Any]:
7373
symbol, market_data
7474
)
7575
symbol_data["financials"] = (
76-
financials.dict() if financials else None
76+
financials.model_dump() if financials else None
7777
)
7878

7979
if include_technical:
@@ -82,7 +82,7 @@ async def execute(self, input_data: Dict[str, Any]) -> Dict[str, Any]:
8282
else:
8383
technical = await self._get_equity_technical_indicators(symbol)
8484
symbol_data["technical_indicators"] = (
85-
technical.dict() if technical else None
85+
technical.model_dump() if technical else None
8686
)
8787

8888
results[symbol] = symbol_data

src/tradegraph_financial_advisor/agents/news_agent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ async def execute(self, input_data: Dict[str, Any]) -> Dict[str, Any]:
5454
analyzed_articles = await self._analyze_articles(all_articles, symbols)
5555

5656
return {
57-
"articles": [article.dict() for article in analyzed_articles],
57+
"articles": [article.model_dump() for article in analyzed_articles],
5858
"total_count": len(analyzed_articles),
5959
"sources": settings.news_sources,
6060
"analysis_timestamp": datetime.now().isoformat(),

src/tradegraph_financial_advisor/agents/recommendation_engine.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,13 @@ async def execute(self, input_data: Dict[str, Any]) -> Dict[str, Any]:
6262
)
6363

6464
return {
65-
"individual_recommendations": [rec.dict() for rec in recommendations],
65+
"individual_recommendations": [rec.model_dump() for rec in recommendations],
6666
"portfolio_recommendation": (
67-
portfolio_recommendation.dict() if portfolio_recommendation else None
67+
portfolio_recommendation.model_dump()
68+
if portfolio_recommendation
69+
else None
6870
),
69-
"alerts": [alert.dict() for alert in alerts],
71+
"alerts": [alert.model_dump() for alert in alerts],
7072
"generation_timestamp": datetime.now().isoformat(),
7173
}
7274

src/tradegraph_financial_advisor/config/settings.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,24 @@
33

44
from dotenv import load_dotenv
55
from pydantic import Field
6-
from pydantic_settings import BaseSettings
6+
from pydantic_settings import BaseSettings, SettingsConfigDict
77

88
load_dotenv()
99

1010

1111
class Settings(BaseSettings):
12-
openai_api_key: str = Field("", env="OPENAI_API_KEY")
13-
finnhub_api_key: str = Field("", env="FINNHUB_API_KEY")
14-
alpha_vantage_api_key: Optional[str] = Field(None, env="ALPHA_VANTAGE_API_KEY")
15-
financial_data_api_key: Optional[str] = Field(None, env="FINANCIAL_DATA_API_KEY")
12+
model_config = SettingsConfigDict(
13+
env_file=".env", case_sensitive=False, extra="ignore"
14+
)
15+
16+
openai_api_key: str = Field(default="")
17+
finnhub_api_key: str = Field(default="")
18+
alpha_vantage_api_key: Optional[str] = Field(default=None)
19+
financial_data_api_key: Optional[str] = Field(default=None)
1620

17-
log_level: str = Field("INFO", env="LOG_LEVEL")
18-
max_concurrent_agents: int = Field(5, env="MAX_CONCURRENT_AGENTS")
19-
analysis_timeout_seconds: int = Field(30, env="ANALYSIS_TIMEOUT_SECONDS")
21+
log_level: str = Field(default="INFO")
22+
max_concurrent_agents: int = Field(default=5)
23+
analysis_timeout_seconds: int = Field(default=30)
2024

2125
news_sources: List[str] = Field(
2226
default_factory=lambda: [
@@ -25,8 +29,7 @@ class Settings(BaseSettings):
2529
"yahoo-finance",
2630
"marketwatch",
2731
"cnbc",
28-
],
29-
env="NEWS_SOURCES",
32+
]
3033
)
3134
analysis_depth: str = Field("detailed", env="ANALYSIS_DEPTH")
3235
default_portfolio_size: float = Field(100000.0, env="DEFAULT_PORTFOLIO_SIZE")

src/tradegraph_financial_advisor/main.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,21 @@ async def quick_analysis(
194194
workflow_results, "sentiment_analysis", {}
195195
)
196196

197+
portfolio_recommendation_payload = (
198+
portfolio_recommendation.dict()
199+
if hasattr(portfolio_recommendation, "dict")
200+
else portfolio_recommendation
201+
)
202+
197203
return {
198204
"analysis_type": "basic",
199205
"symbols": symbols,
200206
"recommendations": recommendations,
201-
"portfolio_recommendation": portfolio_recommendation,
207+
"portfolio_recommendation": (
208+
portfolio_recommendation_payload
209+
if portfolio_recommendation_payload
210+
else None
211+
),
202212
"sentiment_analysis": sentiment_analysis,
203213
"analysis_timestamp": datetime.now().isoformat(),
204214
}

tests/unit/test_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,15 +312,15 @@ def test_model_serialization(self):
312312
)
313313

314314
# Test dict conversion
315-
rec_dict = recommendation.dict()
315+
rec_dict = recommendation.model_dump()
316316
assert rec_dict["symbol"] == "AAPL"
317317
assert rec_dict["recommendation"] == "buy"
318318
assert rec_dict["risk_level"] == "medium"
319319

320320
# Test JSON serialization
321321
import json
322322

323-
json_str = recommendation.json()
323+
json_str = recommendation.model_dump_json()
324324
parsed = json.loads(json_str)
325325
assert parsed["symbol"] == "AAPL"
326326

0 commit comments

Comments
 (0)