- ToolAgent initialization
- market API handling list
This commit is contained in:
2025-09-26 13:38:14 +02:00
parent a3824489ed
commit c826a8e093
3 changed files with 30 additions and 20 deletions

View File

@@ -2,8 +2,6 @@ import gradio as gr
from dotenv import load_dotenv from dotenv import load_dotenv
from app.tool import ToolAgent from app.tool import ToolAgent
from app.models import Models
from app.agents.predictor import PredictorStyle
######################################## ########################################
# MAIN APP & GRADIO INTERFACE # MAIN APP & GRADIO INTERFACE
@@ -17,28 +15,21 @@ if __name__ == "__main__":
load_dotenv() load_dotenv()
###################################### ######################################
models = Models.availables() tool_agent = ToolAgent()
styles = list(PredictorStyle)
models_names = [model.name for model in models]
styles_names = [style.value for style in styles]
print("✅ Modelli disponibili:", models_names)
print("✅ Stili disponibili:", styles_names)
tool_agent = ToolAgent(models, styles)
with gr.Blocks() as demo: with gr.Blocks() as demo:
gr.Markdown("# 🤖 Agente di Analisi e Consulenza Crypto") gr.Markdown("# 🤖 Agente di Analisi e Consulenza Crypto")
with gr.Row(): with gr.Row():
provider = gr.Dropdown( provider = gr.Dropdown(
choices=models_names, choices=tool_agent.list_providers(),
type="index", type="index",
label="Modello da usare" label="Modello da usare"
) )
provider.change(fn=tool_agent.choose_provider, inputs=provider, outputs=None) provider.change(fn=tool_agent.choose_provider, inputs=provider, outputs=None)
style = gr.Dropdown( style = gr.Dropdown(
choices=styles_names, choices=tool_agent.list_styles(),
type="index", type="index",
label="Stile di investimento" label="Stile di investimento"
) )

View File

@@ -13,6 +13,16 @@ def get_first_available_market_api(currency:str = "USD") -> BaseWrapper:
:param currency: Valuta di riferimento (default "USD") :param currency: Valuta di riferimento (default "USD")
:return: Lista di istanze di wrapper :return: Lista di istanze di wrapper
""" """
return get_list_available_market_apis(currency=currency)[0]
def get_list_available_market_apis(currency:str = "USD") -> list[BaseWrapper]:
"""
Restituisce la lista di wrapper disponibili in base alle configurazioni del file .env e alle chiavi API presenti.
La priorità è data a Coinbase, poi a CryptoCompare.
Se non sono presenti chiavi API, restituisce una eccezione.
:param currency: Valuta di riferimento (default "USD")
:return: Lista di istanze di wrapper
"""
wrappers = [] wrappers = []
api_key = os.getenv("COINBASE_API_KEY") api_key = os.getenv("COINBASE_API_KEY")
@@ -25,5 +35,4 @@ def get_first_available_market_api(currency:str = "USD") -> BaseWrapper:
wrappers.append(CryptoCompareWrapper(api_key=api_key, currency=currency)) wrappers.append(CryptoCompareWrapper(api_key=api_key, currency=currency))
assert wrappers, "No valid API keys set in environment variables." assert wrappers, "No valid API keys set in environment variables."
return wrappers[0] return wrappers

View File

@@ -9,16 +9,14 @@ from app.models import Models
class ToolAgent: class ToolAgent:
""" """
Classe principale che coordina gli agenti per rispondere alle richieste dell'utente. Classe principale che coordina gli agenti per rispondere alle richieste dell'utente.
available_models: lista dei modelli disponibili (Models.availables()).
all_styles: lista degli stili di previsione disponibili (PredictorStyle).
""" """
def __init__(self, available_models: list[Models], all_styles: list[PredictorStyle]): def __init__(self):
""" """
Inizializza l'agente con i modelli e gli stili disponibili. Inizializza l'agente con i modelli disponibili, gli stili e l'API di mercato.
""" """
self.available_models = available_models self.available_models = Models.availables()
self.all_styles = all_styles self.all_styles = list(PredictorStyle)
self.market = get_first_available_market_api(currency="USD") self.market = get_first_available_market_api(currency="USD")
self.choose_provider(0) # Default to the first model self.choose_provider(0) # Default to the first model
@@ -64,3 +62,15 @@ class ToolAgent:
market_data = "\n".join([f"{product.symbol}: {product.price}" for product in market_data]) market_data = "\n".join([f"{product.symbol}: {product.price}" for product in market_data])
return f"{market_data}\n{sentiment}\n\n📈 Consiglio finale:\n{output}" return f"{market_data}\n{sentiment}\n\n📈 Consiglio finale:\n{output}"
def list_providers(self) -> list[str]:
"""
Restituisce la lista dei nomi dei modelli disponibili.
"""
return [model.name for model in self.available_models]
def list_styles(self) -> list[str]:
"""
Restituisce la lista degli stili di previsione disponibili.
"""
return [style.value for style in self.all_styles]