diff --git a/src/app.py b/src/app.py index 7b1e68a..7c4060e 100644 --- a/src/app.py +++ b/src/app.py @@ -2,8 +2,6 @@ import gradio as gr from dotenv import load_dotenv from app.tool import ToolAgent -from app.models import Models -from app.agents.predictor import PredictorStyle ######################################## # MAIN APP & GRADIO INTERFACE @@ -17,28 +15,21 @@ if __name__ == "__main__": load_dotenv() ###################################### - models = Models.availables() - 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) + tool_agent = ToolAgent() with gr.Blocks() as demo: gr.Markdown("# 🤖 Agente di Analisi e Consulenza Crypto") with gr.Row(): provider = gr.Dropdown( - choices=models_names, + choices=tool_agent.list_providers(), type="index", label="Modello da usare" ) provider.change(fn=tool_agent.choose_provider, inputs=provider, outputs=None) style = gr.Dropdown( - choices=styles_names, + choices=tool_agent.list_styles(), type="index", label="Stile di investimento" ) diff --git a/src/app/markets/__init__.py b/src/app/markets/__init__.py index e120b95..ffc687c 100644 --- a/src/app/markets/__init__.py +++ b/src/app/markets/__init__.py @@ -13,6 +13,16 @@ def get_first_available_market_api(currency:str = "USD") -> BaseWrapper: :param currency: Valuta di riferimento (default "USD") :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 = [] 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)) assert wrappers, "No valid API keys set in environment variables." - return wrappers[0] - + return wrappers diff --git a/src/app/tool.py b/src/app/tool.py index 169a744..79741cd 100644 --- a/src/app/tool.py +++ b/src/app/tool.py @@ -9,16 +9,14 @@ from app.models import Models class ToolAgent: """ 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.all_styles = all_styles + self.available_models = Models.availables() + self.all_styles = list(PredictorStyle) self.market = get_first_available_market_api(currency="USD") 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]) 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]