CryptoSymbolsTools integrazione nel sistema di strumenti.

This commit is contained in:
2025-10-21 12:22:27 +02:00
parent ea697d759f
commit b1aba10c6c
4 changed files with 36 additions and 8 deletions

View File

@@ -96,7 +96,7 @@ class PipelineInputs:
return Team( return Team(
model=self.team_leader_model.get_model(TEAM_LEADER_INSTRUCTIONS), model=self.team_leader_model.get_model(TEAM_LEADER_INSTRUCTIONS),
name="CryptoAnalysisTeam", name="CryptoAnalysisTeam",
tools=[ReasoningTools(), PlanMemoryTool()], tools=[ReasoningTools(), PlanMemoryTool(), CryptoSymbolsTools()],
members=[market_agent, news_agent, social_agent], members=[market_agent, news_agent, social_agent],
) )

View File

@@ -1,6 +1,6 @@
from app.api.tools.market_tool import MarketAPIsTool from app.api.tools.market_tool import MarketAPIsTool
from app.api.tools.social_tool import SocialAPIsTool from app.api.tools.social_tool import SocialAPIsTool
from app.api.tools.news_tool import NewsAPIsTool from app.api.tools.news_tool import NewsAPIsTool
from app.api.tools.symbols_tool import CryptoSymbols from app.api.tools.symbols_tool import CryptoSymbolsTools
__all__ = ["MarketAPIsTool", "NewsAPIsTool", "SocialAPIsTool", "CryptoSymbols"] __all__ = ["MarketAPIsTool", "NewsAPIsTool", "SocialAPIsTool", "CryptoSymbolsTools"]

View File

@@ -13,7 +13,7 @@ logging = logging.getLogger("crypto_symbols")
BASE_URL = "https://finance.yahoo.com/markets/crypto/all/" BASE_URL = "https://finance.yahoo.com/markets/crypto/all/"
class CryptoSymbols(Toolkit): class CryptoSymbolsTools(Toolkit):
""" """
Classe per ottenere i simboli delle criptovalute tramite Yahoo Finance. Classe per ottenere i simboli delle criptovalute tramite Yahoo Finance.
""" """
@@ -23,9 +23,10 @@ class CryptoSymbols(Toolkit):
self.final_table = pd.read_csv(self.cache_file) if os.path.exists(self.cache_file) else pd.DataFrame() # type: ignore self.final_table = pd.read_csv(self.cache_file) if os.path.exists(self.cache_file) else pd.DataFrame() # type: ignore
Toolkit.__init__(self, # type: ignore Toolkit.__init__(self, # type: ignore
name="Crypto Symbols Tool", name="Crypto Symbols Tool",
instructions="Tool to get cryptocurrency symbols and search them by name.",
tools=[ tools=[
self.get_all_symbols, self.get_all_symbols,
self.get_symbol_by_name, self.get_symbols_by_name,
], ],
) )
@@ -37,7 +38,7 @@ class CryptoSymbols(Toolkit):
""" """
return self.final_table['Symbol'].tolist() if not self.final_table.empty else [] return self.final_table['Symbol'].tolist() if not self.final_table.empty else []
def get_symbol_by_name(self, query: str) -> list[str]: def get_symbols_by_name(self, query: str) -> list[tuple[str, str]]:
""" """
Cerca i simboli che contengono la query. Cerca i simboli che contengono la query.
Args: Args:
@@ -47,7 +48,7 @@ class CryptoSymbols(Toolkit):
""" """
query_lower = query.lower() query_lower = query.lower()
positions = self.final_table['Name'].str.lower().str.contains(query_lower) positions = self.final_table['Name'].str.lower().str.contains(query_lower)
return self.final_table[positions]['Symbol'].tolist() return self.final_table[positions][['Symbol', 'Name']].apply(tuple, axis=1).tolist()
async def fetch_crypto_symbols(self, force_refresh: bool = False) -> None: async def fetch_crypto_symbols(self, force_refresh: bool = False) -> None:
""" """
@@ -98,5 +99,5 @@ class CryptoSymbols(Toolkit):
if __name__ == "__main__": if __name__ == "__main__":
crypto_symbols = CryptoSymbols() crypto_symbols = CryptoSymbolsTools()
asyncio.run(crypto_symbols.fetch_crypto_symbols(force_refresh=True)) asyncio.run(crypto_symbols.fetch_crypto_symbols(force_refresh=True))

View File

@@ -0,0 +1,27 @@
import pytest
from app.api.tools import CryptoSymbolsTools
@pytest.mark.tools
class TestCryptoSymbolsTools:
def test_get_symbols(self):
tool = CryptoSymbolsTools()
symbols = tool.get_all_symbols()
assert isinstance(symbols, list)
assert "BTC-USD" in symbols
def test_get_symbol_by_name(self):
tool = CryptoSymbolsTools()
results = tool.get_symbols_by_name("Bitcoin")
assert isinstance(results, list)
assert ("BTC-USD", "Bitcoin USD") in results
results = tool.get_symbols_by_name("Banana")
assert isinstance(results, list)
assert ("BANANA28886-USD", "BananaCoin USD") in results
def test_get_symbol_by_invalid_name(self):
tool = CryptoSymbolsTools()
results = tool.get_symbols_by_name("InvalidName")
assert isinstance(results, list)
assert not results