Refactor
- ToolAgent initialization - market API handling list
This commit is contained in:
15
src/app.py
15
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"
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user