Your twice-daily 3-minute AI briefing. Read less, know more. ποΈ A fully autonomous AI agent that fetches, ranks, summarizes, and delivers the top 5 AI tech stories β as a formatted Telegram message and a human-quality voice briefing β in English or Hindi, twice a day.
llama-3.3-70b-versatile Article scoring, summarization, translation RSS Parsing feedparser + requests Fetching articles from 12 sources Text-to-Speech edge-tts β Microsoft Neural Voice briefings in EN & HI Telegram python-telegram-bot v22 Delivery, bot commands, inline keyboards Database MongoDB + PyMongo Subscribers + deduplication ledger Scheduling Custom IST Loop / schedule Hourly daemon runner & job scheduler Frontend Next.js 16 + Tailwind CSS + Framer Motion Landing page Language Python 3.12+ Core backend Caching File-based JSON 22-hour LLM response cachegraph.py β The OrchestratorStateGraph with a shared State TypedDict that flows through all 4 nodes. Each node reads from and writes to this shared state, keeping the pipeline clean and testable in isolation.fetch_news.py β The Ingestion Layersummarize.py β The Intelligence LayerThreadPoolExecutor(max_workers=4) β 4x faster than sequentialrank_and_diversify(): Three-pass selection ensuring the daily digest is never dominated by a single topic or sourcecache.py β The Cost Shield{} sentinel values). This prevents re-spending tokens on articles already evaluated. Capped at 500 entries with auto-eviction.db.py β The Database Layersubscribers: Stores chat_id, username, language, delivery_time, active flaghistory: Permanent ledger β every sent article's URL and title fingerprint are stored here forever. Never expires.daily_digests: Stores the raw text content of the generated digests for each date and language.digest_audio: GridFS collections (digest_audio.files and digest_audio.chunks) storing the binary voice notes (.mp3 files) for each digest.voice_engine.py β The Audio Layerΰ€Έΰ₯ΰ€ͺΰ₯ΰ€°ΰ€ΰ€Ύΰ€€...), transitions (ΰ€
ΰ€ΰ€²ΰ₯ ΰ€ΰ€¬ΰ€°...), and outros_clean_for_speech(): Strips URLs, emojis, category labels, markdown syntax, and score tags that sound awkward when read aloudthreading.Thread to run asyncio.run() safely if called from within an existing event loop (avoids RuntimeError: no running event loop)telegram_bot.py β The Delivery Layer--send (broadcast) and --bot (interactive registration)π°, π§ , π) instead of English strings β ensures both EN and HI digests are parsed correctlyNone on update.message, update.effective_user, etc.scheduler.py β The Background Workerschedule library when run as a standalone script).run.py β The Unified Entry Point/start Subscribe and set language + delivery time preferences /stop Unsubscribe (sets active: False in DB) /latest Get today's digest immediately on demand /help Show all available commandshttps://t.me/aitechdigest_bot.edge-tts audio generate only once per day per language./latest command failed to retrieve today's news if there were no scheduled deliveries earlier that morning.scheduler.py to evaluate the current time and dates using the ZoneInfo("Asia/Kolkata") timezone./latest Telegram command to dynamically trigger ensure_digest_generated() on demand if the local text files are missing.python run.py Frontend Vercel Root directory: landing/pip install -r requirements.txtpython run.pyrun.py so it cleanly binds to Render's $PORT, allowing the entire backend to run on the Free Web Service tier instead of requiring a paid Background Worker.landing/ during import.env file in the project root:Posted Aug 9, 2026
Developed an autonomous AI news agent delivering top AI stories via Telegram.
0
1