diff --git a/src/app.py b/src/app.py index 983779e..8477149 100644 --- a/src/app.py +++ b/src/app.py @@ -1,7 +1,7 @@ import gradio as gr from dotenv import load_dotenv -from app.tool import ToolAgent +from app.pipeline import Pipeline from agno.utils.log import log_info ######################################## @@ -16,31 +16,31 @@ if __name__ == "__main__": load_dotenv() ###################################### - tool_agent = ToolAgent() + pipeline = Pipeline() with gr.Blocks() as demo: gr.Markdown("# 🤖 Agente di Analisi e Consulenza Crypto") with gr.Row(): provider = gr.Dropdown( - choices=tool_agent.list_providers(), + choices=pipeline.list_providers(), type="index", label="Modello da usare" ) - provider.change(fn=tool_agent.choose_provider, inputs=provider, outputs=None) + provider.change(fn=pipeline.choose_provider, inputs=provider, outputs=None) style = gr.Dropdown( - choices=tool_agent.list_styles(), + choices=pipeline.list_styles(), type="index", label="Stile di investimento" ) - style.change(fn=tool_agent.choose_style, inputs=style, outputs=None) + style.change(fn=pipeline.choose_style, inputs=style, outputs=None) user_input = gr.Textbox(label="Richiesta utente") output = gr.Textbox(label="Risultato analisi", lines=12) analyze_btn = gr.Button("🔎 Analizza") - analyze_btn.click(fn=tool_agent.interact, inputs=[user_input], outputs=output) + analyze_btn.click(fn=pipeline.interact, inputs=[user_input], outputs=output) server, port = ("0.0.0.0", 8000) log_info(f"Starting UPO AppAI on http://{server}:{port}") diff --git a/src/app/agents/market_agent.py b/src/app/agents/market_agent.py new file mode 100644 index 0000000..3325f97 --- /dev/null +++ b/src/app/agents/market_agent.py @@ -0,0 +1,35 @@ + +from agno.agent import Agent +from src.app.toolkits.market_toolkit import MarketToolkit + + +class MarketAgent(Agent): + """ + Wrapper che trasforma MarketToolkit in un Agent compatibile con Team. + Espone un metodo run(query) che restituisce dati di mercato. + """ + + def __init__(self, currency: str = "USD"): + self.toolkit = MarketToolkit() + self.currency = currency + self.name = "MarketAgent" + + def run(self, query: str) -> str: + # Heuristica semplice: se la query cita simboli specifici, recupera quelli + symbols = [] + for token in query.upper().split(): + if token in ("BTC", "ETH", "XRP", "LTC", "BCH"): # TODO: estendere dinamicamente + symbols.append(token) + + if not symbols: + symbols = ["BTC", "ETH"] # default + + results = [] + for sym in symbols: + try: + price = self.toolkit.get_current_price(sym) + results.append(f"{sym}: {price}") + except Exception as e: + results.append(f"{sym}: errore ({e})") + + return "📊 Dati di mercato:\n" + "\n".join(results) \ No newline at end of file diff --git a/src/app/tool.py b/src/app/pipeline.py similarity index 96% rename from src/app/tool.py rename to src/app/pipeline.py index d0b3ca0..d5508c2 100644 --- a/src/app/tool.py +++ b/src/app/pipeline.py @@ -1,11 +1,11 @@ from app.agents.news_agent import NewsAgent from app.agents.social_agent import SocialAgent -from app.agents.predictor import PredictorStyle, PredictorInput, PredictorOutput, PREDICTOR_INSTRUCTIONS +from app.predictor import PredictorStyle, PredictorInput, PredictorOutput, PREDICTOR_INSTRUCTIONS from app.markets import MarketAPIs from app.models import AppModels from agno.utils.log import log_info -class ToolAgent: +class Pipeline: """ Classe principale che coordina gli agenti per rispondere alle richieste dell'utente. """ diff --git a/src/app/agents/predictor.py b/src/app/predictor.py similarity index 100% rename from src/app/agents/predictor.py rename to src/app/predictor.py diff --git a/src/app/toolkits/__init__.py b/src/app/toolkits/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/app/agents/market.py b/src/app/toolkits/market_toolkit.py similarity index 100% rename from src/app/agents/market.py rename to src/app/toolkits/market_toolkit.py diff --git a/tests/agents/test_predictor.py b/tests/agents/test_predictor.py index c99104b..baf488d 100644 --- a/tests/agents/test_predictor.py +++ b/tests/agents/test_predictor.py @@ -1,5 +1,5 @@ import pytest -from app.agents.predictor import PREDICTOR_INSTRUCTIONS, PredictorInput, PredictorOutput, PredictorStyle +from app.predictor import PREDICTOR_INSTRUCTIONS, PredictorInput, PredictorOutput, PredictorStyle from app.markets.base import ProductInfo from app.models import AppModels