CryptoSymbolsTools integrazione nel sistema di strumenti.
This commit is contained in:
@@ -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],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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"]
|
||||||
@@ -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))
|
||||||
|
|||||||
27
tests/tools/test_crypto_symbols.py
Normal file
27
tests/tools/test_crypto_symbols.py
Normal 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
|
||||||
Reference in New Issue
Block a user