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 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"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user