Better logging

This commit is contained in:
2025-10-09 12:43:27 +02:00
parent e7c32cc227
commit 2642b0a221
7 changed files with 111 additions and 57 deletions

View File

@@ -1,9 +1,12 @@
import logging
from agno.run.agent import RunOutput
from app.agents.models import AppModels
from app.agents.team import create_team_with
from app.agents.predictor import PREDICTOR_INSTRUCTIONS, PredictorInput, PredictorOutput, PredictorStyle
from app.base.markets import ProductInfo
logging = logging.getLogger(__name__)
class Pipeline:
"""
@@ -65,42 +68,51 @@ class Pipeline:
3. Invoca Predictor
4. Restituisce la strategia finale
"""
# Step 1: raccolta output dai membri del Team
logging.info(f"Pipeline received query: {query}")
team_outputs = self.team.run(query) # type: ignore
# Step 2: aggregazione output strutturati
all_products: list[ProductInfo] = []
sentiments: list[str] = []
# Step 2: recupero ouput
if not isinstance(team_outputs.content, str):
logging.error(f"Team output is not a string: {team_outputs.content}")
raise ValueError("Team output is not a string")
logging.info(f"Team finished")
return team_outputs.content
for agent_output in team_outputs.member_responses:
if isinstance(agent_output, RunOutput) and agent_output.metadata is not None:
keys = agent_output.metadata.keys()
if "products" in keys:
all_products.extend(agent_output.metadata["products"])
if "sentiment_news" in keys:
sentiments.append(agent_output.metadata["sentiment_news"])
if "sentiment_social" in keys:
sentiments.append(agent_output.metadata["sentiment_social"])
# # Step 2: aggregazione output strutturati
# all_products: list[ProductInfo] = []
# sentiments: list[str] = []
aggregated_sentiment = "\n".join(sentiments)
# for agent_output in team_outputs.member_responses:
# if isinstance(agent_output, RunOutput) and agent_output.metadata is not None:
# keys = agent_output.metadata.keys()
# if "products" in keys:
# all_products.extend(agent_output.metadata["products"])
# if "sentiment_news" in keys:
# sentiments.append(agent_output.metadata["sentiment_news"])
# if "sentiment_social" in keys:
# sentiments.append(agent_output.metadata["sentiment_social"])
# Step 3: invocazione Predictor
predictor_input = PredictorInput(
data=all_products,
style=self.style,
sentiment=aggregated_sentiment
)
# aggregated_sentiment = "\n".join(sentiments)
result = self.predictor.run(predictor_input) # type: ignore
if not isinstance(result.content, PredictorOutput):
return "❌ Errore: il modello non ha restituito un output valido."
prediction: PredictorOutput = result.content
# # Step 3: invocazione Predictor
# predictor_input = PredictorInput(
# data=all_products,
# style=self.style,
# sentiment=aggregated_sentiment
# )
# result = self.predictor.run(predictor_input) # type: ignore
# if not isinstance(result.content, PredictorOutput):
# return "❌ Errore: il modello non ha restituito un output valido."
# prediction: PredictorOutput = result.content
# Step 4: restituzione strategia finale
portfolio_lines = "\n".join(
[f"{item.asset} ({item.percentage}%): {item.motivation}" for item in prediction.portfolio]
)
return (
f"📊 Strategia ({self.style.value}): {prediction.strategy}\n\n"
f"💼 Portafoglio consigliato:\n{portfolio_lines}"
)
# portfolio_lines = "\n".join(
# [f"{item.asset} ({item.percentage}%): {item.motivation}" for item in prediction.portfolio]
# )
# return (
# f"📊 Strategia ({self.style.value}): {prediction.strategy}\n\n"
# f"💼 Portafoglio consigliato:\n{portfolio_lines}"
# )