From 9cd3184bd24519d523ed71b4f6f02f1634866b05 Mon Sep 17 00:00:00 2001 From: Berack96 Date: Thu, 9 Oct 2025 13:49:38 +0200 Subject: [PATCH] Aggiornato il comportamento del logging per i logger di agno. Aggiunto il supporto per l'opzione check_for_async nella configurazione di RedditWrapper. --- docs/Telegram_Integration_plan.md | 46 ------------------------------- src/app/__main__.py | 11 ++++++-- src/app/social/reddit.py | 1 + 3 files changed, 10 insertions(+), 48 deletions(-) delete mode 100644 docs/Telegram_Integration_plan.md diff --git a/docs/Telegram_Integration_plan.md b/docs/Telegram_Integration_plan.md deleted file mode 100644 index 8f477f6..0000000 --- a/docs/Telegram_Integration_plan.md +++ /dev/null @@ -1,46 +0,0 @@ -# Implementazione Bot Telegram (Python + InlineKeyboard) - -Il progetto si basa sulla libreria **`python-telegram-bot`** e sull'uso di **`InlineKeyboard`** per gestire le scelte dell'utente, assicurando un'interfaccia rapida e pulita. - -## 1. Setup e Flusso Iniziale - -### Inizializzazione - -Dovrai innanzitutto inizializzare l'oggetto bot con il tuo **token API** di Telegram e configurare l'**Application** (o il Dispatcher). - -### Handler Principali - -* **Comando `/start`** : Implementa l'handler per questo comando. La sua funzione è inviare un messaggio di benvenuto e presentare immediatamente la prima **`InlineKeyboard`** per la scelta della strategia (A/B). - -## 2. Gestione dei Menu (InlineKeyboard) - -Per le scelte di Strategia (A/B) e LLM (Dropdown), la soluzione è basata interamente sulla gestione delle **`InlineKeyboard`** e dei `CallbackQuery`. - -### Tasti e Azioni - -* **Strategia (A/B)** : Crea una `InlineKeyboard` con i pulsanti 'A' e 'B', ciascuno con un `callback_data` univoco (es. `strategy_A`). -* **Selezione LLM** : Dopo la scelta della strategia, invia una nuova `InlineKeyboard` per la selezione dell'LLM (es. GPT-3.5, Gemini), assegnando un `callback_data` (es. `llm_gpt35`) ad ogni opzione. -* **`CallbackQuery` Handler** : Un unico handler catturerà la pressione di tutti questi pulsanti. Questo gestore deve analizzare il `callback_data` per determinare quale scelta è stata fatta. - -### Gestione dello Stato - -È fondamentale utilizzare un meccanismo (come il **`ConversationHandler`** della libreria o un sistema di stato personalizzato) per **memorizzare le scelte** dell'utente (`Strategia` e `LLM`) man mano che vengono fatte, guidando il flusso verso la fase successiva. - -## 3. Interazione con la LLM e Output - -### Acquisizione del Prompt - -* **Prompt Handler** : Dopo che l'utente ha selezionato sia la Strategia che l'LLM, il bot deve attendere un **messaggio di testo** dall'utente. Questo handler si attiverà solo quando lo stato dell'utente indica che le scelte iniziali sono state fatte. - -### Feedback e Output (Gestione degli aggiornamenti) - -Questo è il punto cruciale per evitare lo spam in chat: - -1. **Indicatore di Lavoro** : Appena ricevuto il prompt, invia l'azione **`ChatAction.TYPING`** (`sta scrivendo...`) per dare feedback immediato all'utente. -2. **Messaggio Placeholder** : Invia un messaggio iniziale (es. "Elaborazione in corso, attendere...") e **memorizza il suo `message_id`** . -3. **Aggiornamento in Tempo Reale** : Per ogni *output parziale* (`poutput`) ricevuto dalla tua LLM, utilizza la funzione **`edit_message_text`** passando l'ID del messaggio memorizzato. Questo aggiornerà continuamente l'unico messaggio esistente in chat. -4. **Output Finale** : Una volta che la LLM ha terminato, esegui l'ultima modifica del messaggio (o inviane uno nuovo, a tua discrezione) e **resetta lo stato** dell'utente per un nuovo ciclo di interazione. - -### Gestione degli Errori - -Integra un gestore di eccezioni (`try...except`) per catturare eventuali errori durante la chiamata all'API della LLM, inviando un messaggio informativo e di scuse all'utente. diff --git a/src/app/__main__.py b/src/app/__main__.py index 4132755..cc9a848 100644 --- a/src/app/__main__.py +++ b/src/app/__main__.py @@ -30,7 +30,15 @@ logging.config.dictConfig({ } }) - +# Modifichiamo i logger di agno +import agno.utils.log # type: ignore +agno_logger_names = ["agno", "agno-team", "agno-workflow"] +for logger_name in agno_logger_names: + logger = logging.getLogger(logger_name) + logger.handlers.clear() + # Imposta la propagazione su True affinché i log passino al logger root + # e usino i tuoi handler configurati nel logger root. + logger.propagate = True # IMPORTARE LIBRERIE DA QUI IN POI from app.utils import ChatManager, BotFunctions @@ -48,4 +56,3 @@ if __name__ == "__main__": telegram = BotFunctions.create_bot(share_url) telegram.run_polling() - diff --git a/src/app/social/reddit.py b/src/app/social/reddit.py index eeca968..f036b1b 100644 --- a/src/app/social/reddit.py +++ b/src/app/social/reddit.py @@ -59,6 +59,7 @@ class RedditWrapper(SocialWrapper): client_id=client_id, client_secret=client_secret, user_agent="upo-appAI", + check_for_async=False, ) self.subreddits = self.tool.subreddit("+".join(SUBREDDITS))