Spaces:
Runtime error
Runtime error
Commit ·
da3a984
1
Parent(s): 96e481c
refactor: Update application agents to use InferenceClientModel and enhance README for clarity and detail
Browse files- .gitignore +8 -0
- README.md +45 -36
- app.py +1 -12
- data/ai_bookmarks_cache.json +163 -315
- requirements.txt +8 -8
- src/agents/bookmarks_agent.py +5 -5
- src/agents/categoriser_agent.py +5 -5
- src/agents/gmail_agent.py +5 -10
- src/agents/manager_agent.py +4 -4
- src/agents/web_agents.py +6 -6
- src/interfaces/gradio_interface.py +97 -65
.gitignore
CHANGED
|
@@ -4,6 +4,14 @@ gcp-oauth.keys.json
|
|
| 4 |
# Gradio cache
|
| 5 |
.gradio/
|
| 6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
# Byte-compiled / optimized / DLL files
|
| 8 |
__pycache__/
|
| 9 |
*.py[cod]
|
|
|
|
| 4 |
# Gradio cache
|
| 5 |
.gradio/
|
| 6 |
|
| 7 |
+
# Binary files in data directory
|
| 8 |
+
data/*.png
|
| 9 |
+
data/*.jpg
|
| 10 |
+
data/*.jpeg
|
| 11 |
+
data/*.gif
|
| 12 |
+
data/*.bmp
|
| 13 |
+
data/*.tiff
|
| 14 |
+
|
| 15 |
# Byte-compiled / optimized / DLL files
|
| 16 |
__pycache__/
|
| 17 |
*.py[cod]
|
README.md
CHANGED
|
@@ -36,19 +36,19 @@ Built for the **Agents & MCP Hackathon 2025 — Track 3: Agentic Demo Showcase**
|
|
| 36 |
| Newsletter overload every morning | One-click OAuth fetch, auto-tagging & summarisation |
|
| 37 |
| Thousand-tab bookmark graveyard | AI categorisation & semantic search |
|
| 38 |
| Context-switching between inbox, browser, search | Single chat interface powered by agents |
|
| 39 |
-
| Opaque AI answers | Real-time
|
| 40 |
|
| 41 |
---
|
| 42 |
|
| 43 |
## 🚀 Live Demo — 30-Second Flow
|
| 44 |
|
| 45 |
-
1. **Open the Space** and
|
| 46 |
-
2.
|
| 47 |
-
3.
|
| 48 |
-
4.
|
| 49 |
-
5. Watch the agents think
|
| 50 |
|
| 51 |
-
[▶︎ **
|
| 52 |
|
| 53 |
---
|
| 54 |
|
|
@@ -57,21 +57,21 @@ Built for the **Agents & MCP Hackathon 2025 — Track 3: Agentic Demo Showcase**
|
|
| 57 |
```
|
| 58 |
ReMind/
|
| 59 |
├─ config/ # default prompts, yaml configs
|
| 60 |
-
├─ data/ #
|
| 61 |
├─ src/ # package root (importable as `remind`)
|
| 62 |
-
│ ├─ agents/ # Manager, Gmail, Bookmark,
|
| 63 |
-
│ ├─ interfaces/ # Gradio
|
| 64 |
│ ├─ tools/ # Gmail API wrapper, bookmark parser, utils
|
| 65 |
│ ├─ __init__.py
|
| 66 |
│ └─ main.py # entrypoint when imported as a module
|
| 67 |
-
├─ app.py # HF Spaces entrypoint
|
| 68 |
├─ .env.example # copy → .env and fill in secrets
|
| 69 |
├─ requirements.txt # runtime deps
|
| 70 |
├─ pyproject.toml # tooling & formatting
|
| 71 |
└─ README.md # you are here
|
| 72 |
```
|
| 73 |
|
| 74 |
-
The **root‐level `app.py`** is the single entrypoint required by Hugging Face Spaces. It
|
| 75 |
|
| 76 |
---
|
| 77 |
|
|
@@ -93,45 +93,54 @@ $ python app.py # opens http://localhost:7860
|
|
| 93 |
|
| 94 |
| Key | Description |
|
| 95 |
| ---------------------------------------------- | -------------------------------------------------------- |
|
| 96 |
-
| `HF_TOKEN` | Hugging Face token for
|
| 97 |
-
| `GOOGLE_CLIENT_ID` / `GOOGLE_CLIENT_SECRET` | OAuth credentials from Google Cloud Console
|
| 98 |
-
| `GOOGLE_REFRESH_TOKEN` / `GOOGLE_ACCESS_TOKEN` | Generated by
|
| 99 |
|
| 100 |
-
> **Tip — Gmail setup**:
|
| 101 |
|
| 102 |
---
|
| 103 |
|
| 104 |
## 🛠️ Key Components
|
| 105 |
|
|
|
|
|
|
|
|
|
|
| 106 |
* **Multi-Agent Orchestrator** — built with *SmolagentS*; assigns Gmail parsing, bookmarking, and RAG tasks to specialists.
|
| 107 |
-
* **LLM Stack** —
|
| 108 |
-
* **Vector Store** — in-memory
|
| 109 |
-
* **Gradio 5 UI** — three-tab layout
|
| 110 |
|
| 111 |
---
|
| 112 |
|
| 113 |
## 🎯 Core Features (MVP)
|
| 114 |
|
| 115 |
-
1. **
|
| 116 |
-
•
|
| 117 |
-
•
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
•
|
| 121 |
-
|
| 122 |
-
•
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
•
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
|
| 127 |
---
|
| 128 |
|
| 129 |
## 🛣️ Roadmap (Post-Hackathon)
|
| 130 |
|
| 131 |
-
*
|
| 132 |
-
*
|
| 133 |
-
*
|
| 134 |
-
*
|
|
|
|
| 135 |
|
| 136 |
Contribute ideas → [Discussions](https://huggingface.co/spaces/Agents-MCP-Hackathon/ReMind/discussions).
|
| 137 |
|
|
@@ -144,7 +153,7 @@ PRs welcome! During hack-week we operate on a **fast-merge** basis.
|
|
| 144 |
* README with live demo & video ✔️
|
| 145 |
* HF Space public & reproducible ✔️
|
| 146 |
|
| 147 |
-
If ReMind sparks joy, **⭐️ the repo &
|
| 148 |
|
| 149 |
---
|
| 150 |
|
|
@@ -156,7 +165,7 @@ If ReMind sparks joy, **⭐️ the repo & “Like” the Space** — community e
|
|
| 156 |
| Omar Issa | [@omarissa24](https://github.com/omarissa24) | Contributor |
|
| 157 |
| Ziad Mazzawi | [@zmazz](https://github.com/zmazz) | Contributor |
|
| 158 |
|
| 159 |
-
Thanks to **Modal Labs**, **Hugging Face**, **OpenAI**, **MistralAI**, and **
|
| 160 |
|
| 161 |
---
|
| 162 |
|
|
|
|
| 36 |
| Newsletter overload every morning | One-click OAuth fetch, auto-tagging & summarisation |
|
| 37 |
| Thousand-tab bookmark graveyard | AI categorisation & semantic search |
|
| 38 |
| Context-switching between inbox, browser, search | Single chat interface powered by agents |
|
| 39 |
+
| Opaque AI answers | Real-time "thought process" trace & clickable citations |
|
| 40 |
|
| 41 |
---
|
| 42 |
|
| 43 |
## 🚀 Live Demo — 30-Second Flow
|
| 44 |
|
| 45 |
+
1. **Open the Space** and start with the **"ℹ️ About"** tab to understand the system architecture.
|
| 46 |
+
2. Switch to **"💬 Chat Assistant"** tab to interact with the multi-agent system.
|
| 47 |
+
3. Ask questions like "Search my AI bookmarks" or "Show me my latest emails from news@alphasignal.ai".
|
| 48 |
+
4. Check the **"🏷️ Categories Dashboard"** to see your bookmarks organized by AI categories.
|
| 49 |
+
5. Watch the agents think in real-time and explore your organized digital knowledge.
|
| 50 |
|
| 51 |
+
[▶︎ **Live Demo Space**](https://huggingface.co/spaces/Agents-MCP-Hackathon/ReMind)
|
| 52 |
|
| 53 |
---
|
| 54 |
|
|
|
|
| 57 |
```
|
| 58 |
ReMind/
|
| 59 |
├─ config/ # default prompts, yaml configs
|
| 60 |
+
├─ data/ # AI bookmarks cache & diagram
|
| 61 |
├─ src/ # package root (importable as `remind`)
|
| 62 |
+
│ ├─ agents/ # Manager, Gmail, Bookmark, Categorizer, Web Search
|
| 63 |
+
│ ├─ interfaces/ # Gradio interface with 3 tabs
|
| 64 |
│ ├─ tools/ # Gmail API wrapper, bookmark parser, utils
|
| 65 |
│ ├─ __init__.py
|
| 66 |
│ └─ main.py # entrypoint when imported as a module
|
| 67 |
+
├─ app.py # HF Spaces entrypoint
|
| 68 |
├─ .env.example # copy → .env and fill in secrets
|
| 69 |
├─ requirements.txt # runtime deps
|
| 70 |
├─ pyproject.toml # tooling & formatting
|
| 71 |
└─ README.md # you are here
|
| 72 |
```
|
| 73 |
|
| 74 |
+
The **root‐level `app.py`** is the single entrypoint required by Hugging Face Spaces. It loads the Gradio interface from `src/interfaces/gradio_interface.py`.
|
| 75 |
|
| 76 |
---
|
| 77 |
|
|
|
|
| 93 |
|
| 94 |
| Key | Description |
|
| 95 |
| ---------------------------------------------- | -------------------------------------------------------- |
|
| 96 |
+
| `HF_TOKEN` | Hugging Face token for Qwen3-32B model access |
|
| 97 |
+
| `GOOGLE_CLIENT_ID` / `GOOGLE_CLIENT_SECRET` | OAuth credentials from Google Cloud Console |
|
| 98 |
+
| `GOOGLE_REFRESH_TOKEN` / `GOOGLE_ACCESS_TOKEN` | Generated by Gmail OAuth setup for trusted email access |
|
| 99 |
|
| 100 |
+
> **Tip — Gmail setup**: Configure Google Cloud Console OAuth for Gmail API access. Email reading is restricted to `news@alphasignal.ai` for security.
|
| 101 |
|
| 102 |
---
|
| 103 |
|
| 104 |
## 🛠️ Key Components
|
| 105 |
|
| 106 |
+

|
| 107 |
+
*System architecture showing the multi-agent orchestration and data flow in ReMind*
|
| 108 |
+
|
| 109 |
* **Multi-Agent Orchestrator** — built with *SmolagentS*; assigns Gmail parsing, bookmarking, and RAG tasks to specialists.
|
| 110 |
+
* **LLM Stack** — Qwen3-32B for reasoning and natural language understanding
|
| 111 |
+
* **Vector Store** — in-memory JSON caching for fast bookmark and email access
|
| 112 |
+
* **Gradio 5 UI** — three-tab layout: About, Chat Assistant, and Categories Dashboard with real-time agent "thoughts".
|
| 113 |
|
| 114 |
---
|
| 115 |
|
| 116 |
## 🎯 Core Features (MVP)
|
| 117 |
|
| 118 |
+
1. **Chrome Bookmark Management**
|
| 119 |
+
• Import and cache AI resources from Chrome bookmarks
|
| 120 |
+
• Intelligent categorization into 10 AI-focused categories
|
| 121 |
+
• Search and filter by domain, keywords, and categories
|
| 122 |
+
2. **Gmail Integration (read-only)**
|
| 123 |
+
• Secure access to trusted AI newsletter sources
|
| 124 |
+
• Search and browse recent emails with intelligent filtering
|
| 125 |
+
• Email content reading with natural language queries
|
| 126 |
+
3. **Natural-Language Q&A**
|
| 127 |
+
• Multi-agent system for complex query handling
|
| 128 |
+
• Real-time web search integration for current information
|
| 129 |
+
• Transparent agent reasoning with step-by-step thinking display
|
| 130 |
+
4. **Categories Dashboard**
|
| 131 |
+
• Visual organization of AI bookmarks by category
|
| 132 |
+
• Statistics and insights about your AI knowledge base
|
| 133 |
+
• Easy browsing and discovery of forgotten resources
|
| 134 |
|
| 135 |
---
|
| 136 |
|
| 137 |
## 🛣️ Roadmap (Post-Hackathon)
|
| 138 |
|
| 139 |
+
* Enhanced bookmark import from multiple browsers
|
| 140 |
+
* Advanced categorization with machine learning
|
| 141 |
+
* Email notification integration for real-time updates
|
| 142 |
+
* Shared knowledge bases for teams and communities
|
| 143 |
+
* Mobile-optimized interface for on-the-go access
|
| 144 |
|
| 145 |
Contribute ideas → [Discussions](https://huggingface.co/spaces/Agents-MCP-Hackathon/ReMind/discussions).
|
| 146 |
|
|
|
|
| 153 |
* README with live demo & video ✔️
|
| 154 |
* HF Space public & reproducible ✔️
|
| 155 |
|
| 156 |
+
If ReMind sparks joy, **⭐️ the repo & "Like" the Space** — community engagement counts!
|
| 157 |
|
| 158 |
---
|
| 159 |
|
|
|
|
| 165 |
| Omar Issa | [@omarissa24](https://github.com/omarissa24) | Contributor |
|
| 166 |
| Ziad Mazzawi | [@zmazz](https://github.com/zmazz) | Contributor |
|
| 167 |
|
| 168 |
+
Thanks to **Modal Labs**, **Hugging Face**, **Nebius**, **Anthropic**, **OpenAI**, **Hyperbolic Labs**, **MistralAI**, and **Sambanova.AI** for providing credits that power this demo.
|
| 169 |
|
| 170 |
---
|
| 171 |
|
app.py
CHANGED
|
@@ -8,10 +8,8 @@ import os
|
|
| 8 |
import sys
|
| 9 |
from dotenv import load_dotenv
|
| 10 |
|
| 11 |
-
# Load environment variables
|
| 12 |
load_dotenv()
|
| 13 |
|
| 14 |
-
# Add debug information for deployment
|
| 15 |
print(f"Python version: {sys.version}")
|
| 16 |
|
| 17 |
|
|
@@ -19,12 +17,10 @@ def main():
|
|
| 19 |
"""Main application entry point for Hugging Face Spaces"""
|
| 20 |
print("🚀 Starting ReMind Digital Assistant...")
|
| 21 |
|
| 22 |
-
# Check for required environment variables
|
| 23 |
hf_token = os.getenv("HF_TOKEN")
|
| 24 |
if not hf_token:
|
| 25 |
print("⚠️ Warning: HF_TOKEN not found. Some features may be limited.")
|
| 26 |
|
| 27 |
-
# Check for Gmail OAuth credentials
|
| 28 |
google_client_id = os.getenv("GOOGLE_CLIENT_ID")
|
| 29 |
google_client_secret = os.getenv("GOOGLE_CLIENT_SECRET")
|
| 30 |
google_refresh_token = os.getenv("GOOGLE_REFRESH_TOKEN")
|
|
@@ -37,20 +33,17 @@ def main():
|
|
| 37 |
print("✅ Gmail OAuth credentials configured.")
|
| 38 |
|
| 39 |
try:
|
| 40 |
-
# Import the Gradio interface
|
| 41 |
from src.interfaces.gradio_interface import demo
|
| 42 |
|
| 43 |
print("✅ ReMind Digital Assistant ready!")
|
| 44 |
print("🤔 Real-time AI thinking display enabled")
|
| 45 |
print("📧 Email • 🌐 Web Search • 🔖 Bookmarks")
|
| 46 |
|
| 47 |
-
# Return the demo for Hugging Face Spaces
|
| 48 |
return demo
|
| 49 |
|
| 50 |
except ImportError as e:
|
| 51 |
print(f"❌ Import error: {e}")
|
| 52 |
print("Please ensure all dependencies are installed.")
|
| 53 |
-
# Print more detailed error info for debugging
|
| 54 |
import traceback
|
| 55 |
|
| 56 |
traceback.print_exc()
|
|
@@ -58,19 +51,16 @@ def main():
|
|
| 58 |
|
| 59 |
except Exception as e:
|
| 60 |
print(f"❌ Error starting ReMind: {e}")
|
| 61 |
-
# Print more detailed error info for debugging
|
| 62 |
import traceback
|
| 63 |
|
| 64 |
traceback.print_exc()
|
| 65 |
raise
|
| 66 |
|
| 67 |
|
| 68 |
-
# For Hugging Face Spaces
|
| 69 |
if __name__ == "__main__":
|
| 70 |
try:
|
| 71 |
demo = main()
|
| 72 |
-
|
| 73 |
-
demo.launch()
|
| 74 |
except Exception as e:
|
| 75 |
print(f"❌ Critical error during launch: {e}")
|
| 76 |
import traceback
|
|
@@ -78,5 +68,4 @@ if __name__ == "__main__":
|
|
| 78 |
traceback.print_exc()
|
| 79 |
sys.exit(1)
|
| 80 |
else:
|
| 81 |
-
# When imported, return the demo
|
| 82 |
demo = main()
|
|
|
|
| 8 |
import sys
|
| 9 |
from dotenv import load_dotenv
|
| 10 |
|
|
|
|
| 11 |
load_dotenv()
|
| 12 |
|
|
|
|
| 13 |
print(f"Python version: {sys.version}")
|
| 14 |
|
| 15 |
|
|
|
|
| 17 |
"""Main application entry point for Hugging Face Spaces"""
|
| 18 |
print("🚀 Starting ReMind Digital Assistant...")
|
| 19 |
|
|
|
|
| 20 |
hf_token = os.getenv("HF_TOKEN")
|
| 21 |
if not hf_token:
|
| 22 |
print("⚠️ Warning: HF_TOKEN not found. Some features may be limited.")
|
| 23 |
|
|
|
|
| 24 |
google_client_id = os.getenv("GOOGLE_CLIENT_ID")
|
| 25 |
google_client_secret = os.getenv("GOOGLE_CLIENT_SECRET")
|
| 26 |
google_refresh_token = os.getenv("GOOGLE_REFRESH_TOKEN")
|
|
|
|
| 33 |
print("✅ Gmail OAuth credentials configured.")
|
| 34 |
|
| 35 |
try:
|
|
|
|
| 36 |
from src.interfaces.gradio_interface import demo
|
| 37 |
|
| 38 |
print("✅ ReMind Digital Assistant ready!")
|
| 39 |
print("🤔 Real-time AI thinking display enabled")
|
| 40 |
print("📧 Email • 🌐 Web Search • 🔖 Bookmarks")
|
| 41 |
|
|
|
|
| 42 |
return demo
|
| 43 |
|
| 44 |
except ImportError as e:
|
| 45 |
print(f"❌ Import error: {e}")
|
| 46 |
print("Please ensure all dependencies are installed.")
|
|
|
|
| 47 |
import traceback
|
| 48 |
|
| 49 |
traceback.print_exc()
|
|
|
|
| 51 |
|
| 52 |
except Exception as e:
|
| 53 |
print(f"❌ Error starting ReMind: {e}")
|
|
|
|
| 54 |
import traceback
|
| 55 |
|
| 56 |
traceback.print_exc()
|
| 57 |
raise
|
| 58 |
|
| 59 |
|
|
|
|
| 60 |
if __name__ == "__main__":
|
| 61 |
try:
|
| 62 |
demo = main()
|
| 63 |
+
demo.queue(default_concurrency_limit=20).launch(ssr_mode=False)
|
|
|
|
| 64 |
except Exception as e:
|
| 65 |
print(f"❌ Critical error during launch: {e}")
|
| 66 |
import traceback
|
|
|
|
| 68 |
traceback.print_exc()
|
| 69 |
sys.exit(1)
|
| 70 |
else:
|
|
|
|
| 71 |
demo = main()
|
data/ai_bookmarks_cache.json
CHANGED
|
@@ -1,417 +1,265 @@
|
|
| 1 |
{
|
| 2 |
"bookmarks": [
|
| 3 |
{
|
| 4 |
-
"title": "
|
| 5 |
-
"url": "https://
|
| 6 |
-
"date_added": "
|
| 7 |
"date_modified": "",
|
| 8 |
-
"id": "
|
| 9 |
"category": "model_releases",
|
| 10 |
"category_name": "Model Releases & Updates"
|
| 11 |
},
|
| 12 |
{
|
| 13 |
-
"title": "
|
| 14 |
-
"url": "https://
|
| 15 |
-
"date_added": "
|
| 16 |
"date_modified": "",
|
| 17 |
-
"id": "
|
| 18 |
-
"category": "
|
| 19 |
-
"category_name": "
|
| 20 |
-
},
|
| 21 |
-
{
|
| 22 |
-
"title": "ai_tools",
|
| 23 |
-
"url": "https://lmsys.org/blog/2023-03-30-vicuna/",
|
| 24 |
-
"date_added": "13327875714212791",
|
| 25 |
-
"date_modified": "",
|
| 26 |
-
"id": "34",
|
| 27 |
-
"category": "uncategorized",
|
| 28 |
-
"category_name": "Uncategorized"
|
| 29 |
-
},
|
| 30 |
-
{
|
| 31 |
-
"title": "Classement des images | TensorFlow Core",
|
| 32 |
-
"url": "https://www.tensorflow.org/tutorials/images/classification?hl=fr",
|
| 33 |
-
"date_added": "13326233575357207",
|
| 34 |
-
"date_modified": "",
|
| 35 |
-
"id": "35",
|
| 36 |
-
"category": "community_events",
|
| 37 |
-
"category_name": "Community, Events & Education"
|
| 38 |
-
},
|
| 39 |
-
{
|
| 40 |
-
"title": "Google I/O 2023",
|
| 41 |
-
"url": "https://io.google/2023/intl/fr/",
|
| 42 |
-
"date_added": "13328225028518287",
|
| 43 |
-
"date_modified": "",
|
| 44 |
-
"id": "36",
|
| 45 |
-
"category": "model_releases",
|
| 46 |
-
"category_name": "Model Releases & Updates"
|
| 47 |
-
},
|
| 48 |
-
{
|
| 49 |
-
"title": "Streamlit • A faster way to build and share data apps",
|
| 50 |
-
"url": "https://streamlit.io/",
|
| 51 |
-
"date_added": "13330650437583985",
|
| 52 |
-
"date_modified": "",
|
| 53 |
-
"id": "37",
|
| 54 |
-
"category": "uncategorized",
|
| 55 |
-
"category_name": "Uncategorized"
|
| 56 |
-
},
|
| 57 |
-
{
|
| 58 |
-
"title": "AI Demos - Discover Latest AI Tools with Video Demos",
|
| 59 |
-
"url": "https://www.aidemos.com/",
|
| 60 |
-
"date_added": "13330824848974471",
|
| 61 |
-
"date_modified": "",
|
| 62 |
-
"id": "38",
|
| 63 |
-
"category": "benchmarks_leaderboards",
|
| 64 |
-
"category_name": "Benchmarks & Leaderboards"
|
| 65 |
-
},
|
| 66 |
-
{
|
| 67 |
-
"title": "PrivateGPT - Running \"ChatGPT\" offline on local documents - DEV Community",
|
| 68 |
-
"url": "https://dev.to/codepo8/privategpt-running-chatgpt-offline-on-local-documents-5b17",
|
| 69 |
-
"date_added": "13330859800928018",
|
| 70 |
-
"date_modified": "",
|
| 71 |
-
"id": "39",
|
| 72 |
-
"category": "model_releases",
|
| 73 |
-
"category_name": "Model Releases & Updates"
|
| 74 |
},
|
| 75 |
{
|
| 76 |
-
"title": "
|
| 77 |
-
"url": "https://
|
| 78 |
-
"date_added": "
|
| 79 |
"date_modified": "",
|
| 80 |
-
"id": "
|
| 81 |
"category": "model_releases",
|
| 82 |
"category_name": "Model Releases & Updates"
|
| 83 |
},
|
| 84 |
{
|
| 85 |
-
"title": "
|
| 86 |
-
"url": "https://
|
| 87 |
-
"date_added": "
|
| 88 |
"date_modified": "",
|
| 89 |
-
"id": "
|
| 90 |
"category": "tools_frameworks",
|
| 91 |
-
"category_name": "Tools, Frameworks & Platforms"
|
|
|
|
|
|
|
| 92 |
},
|
| 93 |
{
|
| 94 |
-
"title": "
|
| 95 |
-
"url": "https://
|
| 96 |
-
"date_added": "
|
| 97 |
"date_modified": "",
|
| 98 |
-
"id": "
|
| 99 |
-
"category": "
|
| 100 |
-
"category_name": "
|
|
|
|
|
|
|
| 101 |
},
|
| 102 |
{
|
| 103 |
-
"title": "
|
| 104 |
-
"url": "https://
|
| 105 |
-
"date_added": "
|
| 106 |
"date_modified": "",
|
| 107 |
-
"id": "
|
| 108 |
"category": "model_releases",
|
| 109 |
"category_name": "Model Releases & Updates"
|
| 110 |
},
|
| 111 |
{
|
| 112 |
-
"title": "
|
| 113 |
-
"url": "https://
|
| 114 |
-
"date_added": "
|
| 115 |
-
"date_modified": "",
|
| 116 |
-
"id": "44",
|
| 117 |
-
"category": "community_events",
|
| 118 |
-
"category_name": "Community, Events & Education"
|
| 119 |
-
},
|
| 120 |
-
{
|
| 121 |
-
"title": "GitHub Profile Readme Generator | GitHub Profile Readme Generator",
|
| 122 |
-
"url": "https://rahuldkjain.github.io/gh-profile-readme-generator/",
|
| 123 |
-
"date_added": "13338039247239177",
|
| 124 |
-
"date_modified": "",
|
| 125 |
-
"id": "45",
|
| 126 |
-
"category": "uncategorized",
|
| 127 |
-
"category_name": "Uncategorized"
|
| 128 |
-
},
|
| 129 |
-
{
|
| 130 |
-
"title": "Celian Raimbault",
|
| 131 |
-
"url": "https://portfolio.celian.dev/",
|
| 132 |
-
"date_added": "13338117115620269",
|
| 133 |
-
"date_modified": "",
|
| 134 |
-
"id": "46",
|
| 135 |
-
"category": "uncategorized",
|
| 136 |
-
"category_name": "Uncategorized"
|
| 137 |
-
},
|
| 138 |
-
{
|
| 139 |
-
"title": "DataPen | Free online resources for data scientist and analyst",
|
| 140 |
-
"url": "https://www.datapen.io/",
|
| 141 |
-
"date_added": "13338557687104615",
|
| 142 |
-
"date_modified": "",
|
| 143 |
-
"id": "47",
|
| 144 |
-
"category": "market_trends",
|
| 145 |
-
"category_name": "Market Trends & Analysis"
|
| 146 |
-
},
|
| 147 |
-
{
|
| 148 |
-
"title": "Jour 0: Cours",
|
| 149 |
-
"url": "https://cours.cocadmin.com/view/courses/formation-aws-gratuite/2130055-jour-0-iam-et-cli/6712605-jour-0-cours",
|
| 150 |
-
"date_added": "13338557712719184",
|
| 151 |
"date_modified": "",
|
| 152 |
-
"id": "
|
| 153 |
"category": "tools_frameworks",
|
| 154 |
-
"category_name": "Tools, Frameworks & Platforms"
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
"title": "Free Online PDF Tools - TinyWow",
|
| 158 |
-
"url": "https://tinywow.com/tools/pdf",
|
| 159 |
-
"date_added": "13338931697845265",
|
| 160 |
-
"date_modified": "",
|
| 161 |
-
"id": "49",
|
| 162 |
-
"category": "uncategorized",
|
| 163 |
-
"category_name": "Uncategorized"
|
| 164 |
-
},
|
| 165 |
-
{
|
| 166 |
-
"title": "Top 45 Machine Learning Interview Questions (2023) | Simplilearn",
|
| 167 |
-
"url": "https://www.simplilearn.com/tutorials/machine-learning-tutorial/machine-learning-interview-questions",
|
| 168 |
-
"date_added": "13338981165101756",
|
| 169 |
-
"date_modified": "",
|
| 170 |
-
"id": "50",
|
| 171 |
-
"category": "community_events",
|
| 172 |
-
"category_name": "Community, Events & Education"
|
| 173 |
-
},
|
| 174 |
-
{
|
| 175 |
-
"title": "20 Must-Know Topics In Deep Learning For Beginners | Medium",
|
| 176 |
-
"url": "https://medium.com/@aspershupadhyay/mastering-deep-learning-20-key-concepts-explained-ea405aa6603d",
|
| 177 |
-
"date_added": "13344077670993478",
|
| 178 |
-
"date_modified": "",
|
| 179 |
-
"id": "51",
|
| 180 |
-
"category": "community_events",
|
| 181 |
-
"category_name": "Community, Events & Education"
|
| 182 |
},
|
| 183 |
{
|
| 184 |
-
"title": "
|
| 185 |
-
"url": "https://
|
| 186 |
-
"date_added": "
|
| 187 |
"date_modified": "",
|
| 188 |
-
"id": "
|
| 189 |
-
"category": "
|
| 190 |
-
"category_name": "
|
|
|
|
|
|
|
| 191 |
},
|
| 192 |
{
|
| 193 |
-
"title": "
|
| 194 |
-
"url": "https://
|
| 195 |
-
"date_added": "
|
| 196 |
"date_modified": "",
|
| 197 |
-
"id": "
|
| 198 |
-
"category": "
|
| 199 |
-
"category_name": "
|
|
|
|
|
|
|
| 200 |
},
|
| 201 |
{
|
| 202 |
-
"title": "
|
| 203 |
-
"url": "https://
|
| 204 |
-
"date_added": "
|
| 205 |
"date_modified": "",
|
| 206 |
-
"id": "
|
| 207 |
"category": "model_releases",
|
| 208 |
"category_name": "Model Releases & Updates"
|
| 209 |
},
|
| 210 |
{
|
| 211 |
-
"title": "
|
| 212 |
-
"url": "https://
|
| 213 |
-
"date_added": "
|
| 214 |
"date_modified": "",
|
| 215 |
-
"id": "
|
| 216 |
-
"category": "
|
| 217 |
-
"category_name": "
|
| 218 |
},
|
| 219 |
{
|
| 220 |
-
"title": "
|
| 221 |
-
"url": "https://
|
| 222 |
-
"date_added": "
|
| 223 |
"date_modified": "",
|
| 224 |
-
"id": "
|
| 225 |
-
"category": "
|
| 226 |
-
"category_name": "
|
| 227 |
},
|
| 228 |
{
|
| 229 |
-
"title": "
|
| 230 |
-
"url": "https://
|
| 231 |
-
"date_added": "
|
| 232 |
"date_modified": "",
|
| 233 |
-
"id": "
|
| 234 |
"category": "model_releases",
|
| 235 |
"category_name": "Model Releases & Updates"
|
| 236 |
},
|
| 237 |
{
|
| 238 |
-
"title": "
|
| 239 |
-
"url": "https://
|
| 240 |
-
"date_added": "
|
| 241 |
-
"date_modified": "",
|
| 242 |
-
"id": "58",
|
| 243 |
-
"category": "uncategorized",
|
| 244 |
-
"category_name": "Uncategorized"
|
| 245 |
-
},
|
| 246 |
-
{
|
| 247 |
-
"title": "APiCS Online - Survey chapter: Sango",
|
| 248 |
-
"url": "https://apics-online.info/surveys/59",
|
| 249 |
-
"date_added": "13362494909928555",
|
| 250 |
-
"date_modified": "",
|
| 251 |
-
"id": "59",
|
| 252 |
-
"category": "tools_frameworks",
|
| 253 |
-
"category_name": "Tools, Frameworks & Platforms"
|
| 254 |
-
},
|
| 255 |
-
{
|
| 256 |
-
"title": "OLAC resources in and about the Sango language",
|
| 257 |
-
"url": "http://www.language-archives.org/language/sag",
|
| 258 |
-
"date_added": "13362494915646492",
|
| 259 |
-
"date_modified": "",
|
| 260 |
-
"id": "60",
|
| 261 |
-
"category": "uncategorized",
|
| 262 |
-
"category_name": "Uncategorized"
|
| 263 |
-
},
|
| 264 |
-
{
|
| 265 |
-
"title": "Language Data | SIL International",
|
| 266 |
-
"url": "https://www.sil.org/linguistics/language-data",
|
| 267 |
-
"date_added": "13362494955881924",
|
| 268 |
"date_modified": "",
|
| 269 |
-
"id": "
|
| 270 |
-
"category": "
|
| 271 |
-
"category_name": "
|
| 272 |
},
|
| 273 |
{
|
| 274 |
-
"title": "
|
| 275 |
-
"url": "https://www.
|
| 276 |
-
"date_added": "
|
| 277 |
"date_modified": "",
|
| 278 |
-
"id": "
|
| 279 |
-
"category": "
|
| 280 |
-
"category_name": "
|
| 281 |
},
|
| 282 |
{
|
| 283 |
-
"title": "
|
| 284 |
-
"url": "https://
|
| 285 |
-
"date_added": "
|
| 286 |
"date_modified": "",
|
| 287 |
-
"id": "
|
| 288 |
-
"category": "
|
| 289 |
-
"category_name": "
|
| 290 |
},
|
| 291 |
{
|
| 292 |
-
"title": "
|
| 293 |
-
"url": "https://
|
| 294 |
-
"date_added": "
|
| 295 |
"date_modified": "",
|
| 296 |
-
"id": "
|
| 297 |
-
"category": "
|
| 298 |
-
"category_name": "
|
| 299 |
},
|
| 300 |
{
|
| 301 |
-
"title": "
|
| 302 |
-
"url": "https://
|
| 303 |
-
"date_added": "
|
| 304 |
"date_modified": "",
|
| 305 |
-
"id": "
|
| 306 |
-
"category": "
|
| 307 |
-
"category_name": "
|
| 308 |
},
|
| 309 |
{
|
| 310 |
-
"title": "
|
| 311 |
-
"url": "https://
|
| 312 |
-
"date_added": "
|
| 313 |
"date_modified": "",
|
| 314 |
-
"id": "
|
| 315 |
-
"category": "
|
| 316 |
-
"category_name": "
|
| 317 |
},
|
| 318 |
{
|
| 319 |
-
"title": "
|
| 320 |
-
"url": "https://
|
| 321 |
-
"date_added": "
|
| 322 |
"date_modified": "",
|
| 323 |
-
"id": "
|
| 324 |
-
"category": "
|
| 325 |
-
"category_name": "
|
| 326 |
},
|
| 327 |
{
|
| 328 |
-
"title": "
|
| 329 |
-
"url": "https://
|
| 330 |
-
"date_added": "
|
| 331 |
"date_modified": "",
|
| 332 |
-
"id": "
|
| 333 |
-
"category": "
|
| 334 |
-
"category_name": "
|
| 335 |
},
|
| 336 |
{
|
| 337 |
-
"title": "
|
| 338 |
-
"url": "https://
|
| 339 |
-
"date_added": "
|
| 340 |
"date_modified": "",
|
| 341 |
-
"id": "
|
| 342 |
-
"category": "
|
| 343 |
-
"category_name": "
|
| 344 |
},
|
| 345 |
{
|
| 346 |
-
"title": "
|
| 347 |
-
"url": "https://
|
| 348 |
-
"date_added": "
|
| 349 |
"date_modified": "",
|
| 350 |
-
"id": "
|
| 351 |
"category": "benchmarks_leaderboards",
|
| 352 |
"category_name": "Benchmarks & Leaderboards"
|
| 353 |
},
|
| 354 |
{
|
| 355 |
-
"title": "
|
| 356 |
-
"url": "https://
|
| 357 |
-
"date_added": "
|
| 358 |
-
"date_modified": "",
|
| 359 |
-
"id": "71",
|
| 360 |
-
"category": "model_releases",
|
| 361 |
-
"category_name": "Model Releases & Updates"
|
| 362 |
-
},
|
| 363 |
-
{
|
| 364 |
-
"title": "Single Neuron (easy) - Deep-ML",
|
| 365 |
-
"url": "https://www.deep-ml.com/problem/Single%20Neuron",
|
| 366 |
-
"date_added": "13373457508348775",
|
| 367 |
-
"date_modified": "",
|
| 368 |
-
"id": "72",
|
| 369 |
-
"category": "uncategorized",
|
| 370 |
-
"category_name": "Uncategorized"
|
| 371 |
-
},
|
| 372 |
-
{
|
| 373 |
-
"title": "React Terminal Component",
|
| 374 |
-
"url": "https://primereact.org/terminal/",
|
| 375 |
-
"date_added": "13381418171099712",
|
| 376 |
"date_modified": "",
|
| 377 |
-
"id": "
|
| 378 |
-
"category": "
|
| 379 |
-
"category_name": "
|
| 380 |
},
|
| 381 |
{
|
| 382 |
-
"title": "
|
| 383 |
-
"url": "https://
|
| 384 |
-
"date_added": "
|
| 385 |
"date_modified": "",
|
| 386 |
-
"id": "
|
| 387 |
-
"category": "
|
| 388 |
-
"category_name": "
|
| 389 |
},
|
| 390 |
{
|
| 391 |
-
"title": "
|
| 392 |
-
"url": "https://
|
| 393 |
-
"date_added": "
|
| 394 |
"date_modified": "",
|
| 395 |
-
"id": "
|
| 396 |
-
"category": "
|
| 397 |
-
"category_name": "
|
| 398 |
}
|
| 399 |
],
|
| 400 |
-
"last_updated": "2025-06-
|
| 401 |
"folder_name": "AI ressources",
|
| 402 |
-
"total_count":
|
| 403 |
-
"last_categorized": "2025-06-
|
| 404 |
"categorization_stats": {
|
| 405 |
"research_breakthroughs": 0,
|
| 406 |
-
"model_releases":
|
| 407 |
-
"tools_frameworks":
|
| 408 |
-
"applications_industry":
|
| 409 |
"regulation_ethics": 0,
|
| 410 |
-
"investment_funding":
|
| 411 |
-
"benchmarks_leaderboards":
|
| 412 |
-
"community_events":
|
| 413 |
"security_privacy": 0,
|
| 414 |
-
"market_trends":
|
| 415 |
-
"uncategorized":
|
| 416 |
}
|
| 417 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"bookmarks": [
|
| 3 |
{
|
| 4 |
+
"title": "Meet the Foundation Models framework - WWDC25 - Videos - Apple Developer",
|
| 5 |
+
"url": "https://developer.apple.com/videos/play/wwdc2025/286/?utm_source=alphasignal",
|
| 6 |
+
"date_added": "13394059459581980",
|
| 7 |
"date_modified": "",
|
| 8 |
+
"id": "372",
|
| 9 |
"category": "model_releases",
|
| 10 |
"category_name": "Model Releases & Updates"
|
| 11 |
},
|
| 12 |
{
|
| 13 |
+
"title": "Powering Enterprise Innovation with Voice AI | Speechmatics",
|
| 14 |
+
"url": "https://www.speechmatics.com/enterprise?utm_source=alphasignal",
|
| 15 |
+
"date_added": "13394059486797980",
|
| 16 |
"date_modified": "",
|
| 17 |
+
"id": "375",
|
| 18 |
+
"category": "applications_industry",
|
| 19 |
+
"category_name": "Applications & Industry Use Cases"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
},
|
| 21 |
{
|
| 22 |
+
"title": "Connect Your MCP Client to the Hugging Face Hub",
|
| 23 |
+
"url": "https://huggingface.co/changelog/hf-mcp-server?utm_source=alphasignal",
|
| 24 |
+
"date_added": "13394059490698359",
|
| 25 |
"date_modified": "",
|
| 26 |
+
"id": "376",
|
| 27 |
"category": "model_releases",
|
| 28 |
"category_name": "Model Releases & Updates"
|
| 29 |
},
|
| 30 |
{
|
| 31 |
+
"title": "Conversational Agents",
|
| 32 |
+
"url": "https://www.sarvam.ai/products/conversational-agents?utm_source=alphasignal",
|
| 33 |
+
"date_added": "13394059497403423",
|
| 34 |
"date_modified": "",
|
| 35 |
+
"id": "377",
|
| 36 |
"category": "tools_frameworks",
|
| 37 |
+
"category_name": "Tools, Frameworks & Platforms",
|
| 38 |
+
"manually_categorized": true,
|
| 39 |
+
"recategorized_at": "2025-06-11T00:07:04.495495"
|
| 40 |
},
|
| 41 |
{
|
| 42 |
+
"title": "ManusAI on X: \"Today, Manus Integrates Veo3! Manus isn't just where you generate videos — it's where you craft cinematic experiences. Characters speak naturally with synchronized audio, scenes unfold longer to tell complete narratives, and everything feels sharper, richer, more alive than https://t.co/odnDx4qnYP\" / X",
|
| 43 |
+
"url": "https://x.com/ManusAI_HQ/status/1932091372766720454?utm_source=alphasignal",
|
| 44 |
+
"date_added": "13394059515786279",
|
| 45 |
"date_modified": "",
|
| 46 |
+
"id": "378",
|
| 47 |
+
"category": "tools_frameworks",
|
| 48 |
+
"category_name": "Tools, Frameworks & Platforms",
|
| 49 |
+
"manually_categorized": true,
|
| 50 |
+
"recategorized_at": "2025-06-11T00:07:04.508229"
|
| 51 |
},
|
| 52 |
{
|
| 53 |
+
"title": "OpenAI Developers on X: \"Evals now supports tool use. 🛠️ You can now use tools and Structured Outputs when completing eval runs, and evaluate tool calls based on the arguments passed and responses returned. This supports tools that are OpenAI-hosted, MCP, and non-hosted. Read more in our guides below. https://t.co/4ZhWy2via3\" / X",
|
| 54 |
+
"url": "https://x.com/OpenAIDevs/status/1932169029147557924?utm_source=alphasignal",
|
| 55 |
+
"date_added": "13394059519641524",
|
| 56 |
"date_modified": "",
|
| 57 |
+
"id": "379",
|
| 58 |
"category": "model_releases",
|
| 59 |
"category_name": "Model Releases & Updates"
|
| 60 |
},
|
| 61 |
{
|
| 62 |
+
"title": "What’s new in Xcode - WWDC25 - Videos - Apple Developer",
|
| 63 |
+
"url": "https://developer.apple.com/videos/play/wwdc2025/247/?utm_source=alphasignal",
|
| 64 |
+
"date_added": "13394059524952396",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
"date_modified": "",
|
| 66 |
+
"id": "380",
|
| 67 |
"category": "tools_frameworks",
|
| 68 |
+
"category_name": "Tools, Frameworks & Platforms",
|
| 69 |
+
"manually_categorized": true,
|
| 70 |
+
"recategorized_at": "2025-06-11T00:07:04.520691"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
},
|
| 72 |
{
|
| 73 |
+
"title": "apple/containerization: Containerization is a Swift package for running Linux containers on macOS.",
|
| 74 |
+
"url": "https://github.com/apple/containerization?utm_source=alphasignal",
|
| 75 |
+
"date_added": "13394059528265943",
|
| 76 |
"date_modified": "",
|
| 77 |
+
"id": "381",
|
| 78 |
+
"category": "tools_frameworks",
|
| 79 |
+
"category_name": "Tools, Frameworks & Platforms",
|
| 80 |
+
"manually_categorized": true,
|
| 81 |
+
"recategorized_at": "2025-06-11T00:07:04.531689"
|
| 82 |
},
|
| 83 |
{
|
| 84 |
+
"title": "eyaltoledano/claude-task-master: An AI-powered task-management system you can drop into Cursor, Lovable, Windsurf, Roo, and others.",
|
| 85 |
+
"url": "https://github.com/eyaltoledano/claude-task-master?utm_source=alphasignal",
|
| 86 |
+
"date_added": "13394059531928742",
|
| 87 |
"date_modified": "",
|
| 88 |
+
"id": "382",
|
| 89 |
+
"category": "tools_frameworks",
|
| 90 |
+
"category_name": "Tools, Frameworks & Platforms",
|
| 91 |
+
"manually_categorized": true,
|
| 92 |
+
"recategorized_at": "2025-06-11T00:07:04.542724"
|
| 93 |
},
|
| 94 |
{
|
| 95 |
+
"title": "SkyworkAI/SkyReels-V2: SkyReels-V2: Infinite-length Film Generative model",
|
| 96 |
+
"url": "https://github.com/SkyworkAI/SkyReels-V2?utm_source=alphasignal",
|
| 97 |
+
"date_added": "13394059535234556",
|
| 98 |
"date_modified": "",
|
| 99 |
+
"id": "383",
|
| 100 |
"category": "model_releases",
|
| 101 |
"category_name": "Model Releases & Updates"
|
| 102 |
},
|
| 103 |
{
|
| 104 |
+
"title": "Apple introduces AI-powered live translation tools at WWDC 2025",
|
| 105 |
+
"url": "https://www.engadget.com/big-tech/apple-introduces-ai-powered-live-translation-tools-at-wwdc-2025-173605234.html?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=edbf7c220cff05f72b697c9008e4f95e761dedc0",
|
| 106 |
+
"date_added": "13394059551111244",
|
| 107 |
"date_modified": "",
|
| 108 |
+
"id": "384",
|
| 109 |
+
"category": "applications_industry",
|
| 110 |
+
"category_name": "Applications & Industry Use Cases"
|
| 111 |
},
|
| 112 |
{
|
| 113 |
+
"title": "At WWDC 2025, Apple introduces an AI-powered Shortcuts app | TechCrunch",
|
| 114 |
+
"url": "https://techcrunch.com/2025/06/09/at-wwdc-2025-apple-introduces-an-ai-powered-shortcuts-app/?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=e988e4d8e5999088bffbfa21243a712ef600c540",
|
| 115 |
+
"date_added": "13394059555675724",
|
| 116 |
"date_modified": "",
|
| 117 |
+
"id": "385",
|
| 118 |
+
"category": "applications_industry",
|
| 119 |
+
"category_name": "Applications & Industry Use Cases"
|
| 120 |
},
|
| 121 |
{
|
| 122 |
+
"title": "Apple lets developers tap into its offline AI models | TechCrunch",
|
| 123 |
+
"url": "https://techcrunch.com/2025/06/09/apple-lets-developers-tap-into-its-offline-ai-models/?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=102e38e21406624c226873e61e297474dc88f0c4",
|
| 124 |
+
"date_added": "13394059561293093",
|
| 125 |
"date_modified": "",
|
| 126 |
+
"id": "386",
|
| 127 |
"category": "model_releases",
|
| 128 |
"category_name": "Model Releases & Updates"
|
| 129 |
},
|
| 130 |
{
|
| 131 |
+
"title": "watchOS 26 delivers more personalized ways to stay active and connected - Apple",
|
| 132 |
+
"url": "https://www.apple.com/newsroom/2025/06/watchos-26-delivers-more-personalized-ways-to-stay-active-and-connected/?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=184978928f9499ec9b73494dad98b040c4ecba42",
|
| 133 |
+
"date_added": "13394059563988409",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 134 |
"date_modified": "",
|
| 135 |
+
"id": "387",
|
| 136 |
+
"category": "applications_industry",
|
| 137 |
+
"category_name": "Applications & Industry Use Cases"
|
| 138 |
},
|
| 139 |
{
|
| 140 |
+
"title": "👾 A2A vs. MCP: Two Paths to Smarter, More Connected AI Agents",
|
| 141 |
+
"url": "https://www.forwardfuture.ai/p/a2a-vs-mcp-two-paths-to-smarter-more-connected-ai-agents?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=c0b131924f2ec1d7348cc3d85f3c644f71347be4&last_resource_guid=Post%3A7debb1e7-12f9-4dba-978a-ecc39e11e88a",
|
| 142 |
+
"date_added": "13394059566957892",
|
| 143 |
"date_modified": "",
|
| 144 |
+
"id": "388",
|
| 145 |
+
"category": "applications_industry",
|
| 146 |
+
"category_name": "Applications & Industry Use Cases"
|
| 147 |
},
|
| 148 |
{
|
| 149 |
+
"title": "AI agents are turning Salesforce and SAP into rivals",
|
| 150 |
+
"url": "https://www.economist.com/business/2025/06/05/ai-agents-are-turning-salesforce-and-sap-into-rivals?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=b5b66ce12f790085d56ae45ee7744b85f89ad81f",
|
| 151 |
+
"date_added": "13394059569883698",
|
| 152 |
"date_modified": "",
|
| 153 |
+
"id": "389",
|
| 154 |
+
"category": "applications_industry",
|
| 155 |
+
"category_name": "Applications & Industry Use Cases"
|
| 156 |
},
|
| 157 |
{
|
| 158 |
+
"title": "AMD takes aim at Nvidia's AI hardware dominance with Brium acquisition | TechCrunch",
|
| 159 |
+
"url": "https://techcrunch.com/2025/06/04/amd-takes-aim-at-nvidias-ai-hardware-dominance-with-brium-acquisition/?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=94fc138f8a2d76042f7fdca0e92adc9e37c18130",
|
| 160 |
+
"date_added": "13394059574346870",
|
| 161 |
"date_modified": "",
|
| 162 |
+
"id": "390",
|
| 163 |
+
"category": "investment_funding",
|
| 164 |
+
"category_name": "Investment, Funding & M&A"
|
| 165 |
},
|
| 166 |
{
|
| 167 |
+
"title": "Quantum machine learning: Small-scale photonic quantum processor can already outperform classical counterparts",
|
| 168 |
+
"url": "https://phys.org/news/2025-06-quantum-machine-small-scale-photonic.html?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=9c319e9936f6b4c1e3b48bf37d421cdd4f585f71",
|
| 169 |
+
"date_added": "13394059579087347",
|
| 170 |
"date_modified": "",
|
| 171 |
+
"id": "391",
|
| 172 |
+
"category": "community_events",
|
| 173 |
+
"category_name": "Community, Events & Education"
|
| 174 |
},
|
| 175 |
{
|
| 176 |
+
"title": "China shuts down AI tools during nationwide college exams | The Verge",
|
| 177 |
+
"url": "https://www.theverge.com/news/682737/china-shuts-down-ai-chatbots-exam-season?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=0e60ee709a712af1d3cea42885c7b23bc06f4f01",
|
| 178 |
+
"date_added": "13394059583685173",
|
| 179 |
"date_modified": "",
|
| 180 |
+
"id": "392",
|
| 181 |
+
"category": "applications_industry",
|
| 182 |
+
"category_name": "Applications & Industry Use Cases"
|
| 183 |
},
|
| 184 |
{
|
| 185 |
+
"title": "Amazon to invest $20 billion in AI data centers in Pennsylvania - Axios Philadelphia",
|
| 186 |
+
"url": "https://www.axios.com/local/philadelphia/2025/06/09/amazon-data-centers-pennsylvania?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=f2ce235a24c343d50c95e144806ae72074550d97",
|
| 187 |
+
"date_added": "13394059589429770",
|
| 188 |
"date_modified": "",
|
| 189 |
+
"id": "393",
|
| 190 |
+
"category": "applications_industry",
|
| 191 |
+
"category_name": "Applications & Industry Use Cases"
|
| 192 |
},
|
| 193 |
{
|
| 194 |
+
"title": "BFI AI Report: Film & TV Scripts Training AI \"Pose Threat\" To Sector",
|
| 195 |
+
"url": "https://deadline.com/2025/06/bfi-research-film-tv-script-training-poses-threat-to-sector-1236425794/?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=471645e2897413ac4ce12a91e1f9befdbeed32f2",
|
| 196 |
+
"date_added": "13394059593792876",
|
| 197 |
"date_modified": "",
|
| 198 |
+
"id": "394",
|
| 199 |
+
"category": "community_events",
|
| 200 |
+
"category_name": "Community, Events & Education"
|
| 201 |
},
|
| 202 |
{
|
| 203 |
+
"title": "Why Duolingo's Founder is Doing Damage Control After AI Announcement",
|
| 204 |
+
"url": "https://www.inc.com/kit-eaton/why-duolingos-founder-is-doing-damage-control-after-ai-announcement/91199921?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=427c2962c6cea89db6a4a725a3e8f43998faa63a",
|
| 205 |
+
"date_added": "13394059597611815",
|
| 206 |
"date_modified": "",
|
| 207 |
+
"id": "395",
|
| 208 |
+
"category": "applications_industry",
|
| 209 |
+
"category_name": "Applications & Industry Use Cases"
|
| 210 |
},
|
| 211 |
{
|
| 212 |
+
"title": "Microsoft to introduce AI safety ranking for cloud",
|
| 213 |
+
"url": "https://finance.yahoo.com/news/microsoft-introduce-ai-safety-ranking-104049450.html?utm_source=forwardfuture.ai&utm_medium=newsletter&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&_bhlid=a01bac48201992f70e4282a9ad224ff122a64ef7&guccounter=1",
|
| 214 |
+
"date_added": "13394059610068153",
|
| 215 |
"date_modified": "",
|
| 216 |
+
"id": "396",
|
| 217 |
"category": "benchmarks_leaderboards",
|
| 218 |
"category_name": "Benchmarks & Leaderboards"
|
| 219 |
},
|
| 220 |
{
|
| 221 |
+
"title": "Flux Kontext – AI Tool for Project Managers",
|
| 222 |
+
"url": "https://tools.forwardfuture.ai/tools/flux-kontext/r/reclzsET2G65tIRwr?_bhlid=fdd79136f4e621cd173c244a3a29508b1d9d5645&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&utm_medium=newsletter&utm_source=forwardfuture.ai",
|
| 223 |
+
"date_added": "13394059625235960",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 224 |
"date_modified": "",
|
| 225 |
+
"id": "397",
|
| 226 |
+
"category": "applications_industry",
|
| 227 |
+
"category_name": "Applications & Industry Use Cases"
|
| 228 |
},
|
| 229 |
{
|
| 230 |
+
"title": "Every – AI Tool for Entrepreneurs",
|
| 231 |
+
"url": "https://tools.forwardfuture.ai/tools/every/r/recp063RkknyqMHWp?_bhlid=c12999ed1178a58b7ab0cb01888c9b4ca4da07f3&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&utm_medium=newsletter&utm_source=forwardfuture.ai",
|
| 232 |
+
"date_added": "13394059632241845",
|
| 233 |
"date_modified": "",
|
| 234 |
+
"id": "398",
|
| 235 |
+
"category": "applications_industry",
|
| 236 |
+
"category_name": "Applications & Industry Use Cases"
|
| 237 |
},
|
| 238 |
{
|
| 239 |
+
"title": "Basecamp – AI Tool for Project Managers",
|
| 240 |
+
"url": "https://tools.forwardfuture.ai/tools/basecamp/r/rechBXpXemEfcxh1g?_bhlid=581549671d7e8533e6c348b37ac2f2001b00cc69&utm_campaign=apple-wwdc25-recap-amd-vs-nvidia-enterprise-ai-showdown&utm_medium=newsletter&utm_source=forwardfuture.ai",
|
| 241 |
+
"date_added": "13394059637099620",
|
| 242 |
"date_modified": "",
|
| 243 |
+
"id": "399",
|
| 244 |
+
"category": "applications_industry",
|
| 245 |
+
"category_name": "Applications & Industry Use Cases"
|
| 246 |
}
|
| 247 |
],
|
| 248 |
+
"last_updated": "2025-06-10T23:40:14.023878",
|
| 249 |
"folder_name": "AI ressources",
|
| 250 |
+
"total_count": 26,
|
| 251 |
+
"last_categorized": "2025-06-11T00:06:40.271142",
|
| 252 |
"categorization_stats": {
|
| 253 |
"research_breakthroughs": 0,
|
| 254 |
+
"model_releases": 5,
|
| 255 |
+
"tools_frameworks": 0,
|
| 256 |
+
"applications_industry": 12,
|
| 257 |
"regulation_ethics": 0,
|
| 258 |
+
"investment_funding": 1,
|
| 259 |
+
"benchmarks_leaderboards": 1,
|
| 260 |
+
"community_events": 2,
|
| 261 |
"security_privacy": 0,
|
| 262 |
+
"market_trends": 0,
|
| 263 |
+
"uncategorized": 5
|
| 264 |
}
|
| 265 |
}
|
requirements.txt
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
-
gradio
|
| 2 |
-
google-api-python-client
|
| 3 |
-
google-auth-httplib2
|
| 4 |
-
google-auth-oauthlib
|
| 5 |
-
python-dotenv
|
| 6 |
-
smolagents
|
| 7 |
smolagents[openai]
|
| 8 |
-
openai
|
| 9 |
-
requests
|
|
|
|
| 1 |
+
gradio
|
| 2 |
+
google-api-python-client
|
| 3 |
+
google-auth-httplib2
|
| 4 |
+
google-auth-oauthlib
|
| 5 |
+
python-dotenv
|
| 6 |
+
smolagents
|
| 7 |
smolagents[openai]
|
| 8 |
+
openai
|
| 9 |
+
requests
|
src/agents/bookmarks_agent.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
from typing import List, Dict, Any
|
| 2 |
-
from smolagents import CodeAgent,
|
| 3 |
import os
|
| 4 |
import json
|
| 5 |
import sys
|
|
@@ -328,9 +328,9 @@ def get_cache_info() -> Dict[str, Any]:
|
|
| 328 |
|
| 329 |
# Instantiate the Bookmarks CodeAgent with enhanced tools
|
| 330 |
bookmarks_agent = CodeAgent(
|
| 331 |
-
model=
|
| 332 |
-
|
| 333 |
-
|
| 334 |
),
|
| 335 |
tools=[
|
| 336 |
update_ai_bookmarks_cache,
|
|
@@ -343,6 +343,6 @@ bookmarks_agent = CodeAgent(
|
|
| 343 |
],
|
| 344 |
name="bookmarks_agent",
|
| 345 |
description="Specialized agent for Chrome bookmarks operations, focusing on AI ressources folder. Extracts bookmarks from Chrome and caches them in data/ai_bookmarks_cache.json to avoid direct interaction with Chrome's raw JSON. Provides search, filtering, statistics, and cache management for AI-related bookmarks.",
|
| 346 |
-
max_steps=
|
| 347 |
additional_authorized_imports=["json", "datetime", "urllib.parse", "pathlib"],
|
| 348 |
)
|
|
|
|
| 1 |
from typing import List, Dict, Any
|
| 2 |
+
from smolagents import CodeAgent, InferenceClientModel, tool
|
| 3 |
import os
|
| 4 |
import json
|
| 5 |
import sys
|
|
|
|
| 328 |
|
| 329 |
# Instantiate the Bookmarks CodeAgent with enhanced tools
|
| 330 |
bookmarks_agent = CodeAgent(
|
| 331 |
+
model=InferenceClientModel(
|
| 332 |
+
provider="nebius",
|
| 333 |
+
token=os.environ["HF_TOKEN"],
|
| 334 |
),
|
| 335 |
tools=[
|
| 336 |
update_ai_bookmarks_cache,
|
|
|
|
| 343 |
],
|
| 344 |
name="bookmarks_agent",
|
| 345 |
description="Specialized agent for Chrome bookmarks operations, focusing on AI ressources folder. Extracts bookmarks from Chrome and caches them in data/ai_bookmarks_cache.json to avoid direct interaction with Chrome's raw JSON. Provides search, filtering, statistics, and cache management for AI-related bookmarks.",
|
| 346 |
+
max_steps=6,
|
| 347 |
additional_authorized_imports=["json", "datetime", "urllib.parse", "pathlib"],
|
| 348 |
)
|
src/agents/categoriser_agent.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
from typing import List, Dict, Any
|
| 2 |
-
from smolagents import CodeAgent,
|
| 3 |
import os
|
| 4 |
import json
|
| 5 |
from pathlib import Path
|
|
@@ -524,9 +524,9 @@ def search_bookmarks_by_category_and_query(category: str, query: str) -> List[Di
|
|
| 524 |
|
| 525 |
# Instantiate the Categoriser CodeAgent
|
| 526 |
categoriser_agent = CodeAgent(
|
| 527 |
-
model=
|
| 528 |
-
|
| 529 |
-
|
| 530 |
),
|
| 531 |
tools=[
|
| 532 |
categorize_all_bookmarks,
|
|
@@ -538,6 +538,6 @@ categoriser_agent = CodeAgent(
|
|
| 538 |
],
|
| 539 |
name="categoriser_agent",
|
| 540 |
description="Specializes in categorizing AI news and bookmarks into 10 predefined categories: Research & Breakthroughs, Model Releases & Updates, Tools/Frameworks/Platforms, Applications & Industry Use Cases, Regulation/Ethics/Policy, Investment/Funding/M&A, Benchmarks & Leaderboards, Community/Events/Education, Security/Privacy/Safety, and Market Trends & Analysis. Uses keyword-based categorization and provides tools for managing and searching categorized content.",
|
| 541 |
-
max_steps=
|
| 542 |
additional_authorized_imports=["json", "datetime", "re", "pathlib"],
|
| 543 |
)
|
|
|
|
| 1 |
from typing import List, Dict, Any
|
| 2 |
+
from smolagents import CodeAgent, InferenceClientModel, tool
|
| 3 |
import os
|
| 4 |
import json
|
| 5 |
from pathlib import Path
|
|
|
|
| 524 |
|
| 525 |
# Instantiate the Categoriser CodeAgent
|
| 526 |
categoriser_agent = CodeAgent(
|
| 527 |
+
model=InferenceClientModel(
|
| 528 |
+
provider="nebius",
|
| 529 |
+
token=os.environ["HF_TOKEN"],
|
| 530 |
),
|
| 531 |
tools=[
|
| 532 |
categorize_all_bookmarks,
|
|
|
|
| 538 |
],
|
| 539 |
name="categoriser_agent",
|
| 540 |
description="Specializes in categorizing AI news and bookmarks into 10 predefined categories: Research & Breakthroughs, Model Releases & Updates, Tools/Frameworks/Platforms, Applications & Industry Use Cases, Regulation/Ethics/Policy, Investment/Funding/M&A, Benchmarks & Leaderboards, Community/Events/Education, Security/Privacy/Safety, and Market Trends & Analysis. Uses keyword-based categorization and provides tools for managing and searching categorized content.",
|
| 541 |
+
max_steps=6,
|
| 542 |
additional_authorized_imports=["json", "datetime", "re", "pathlib"],
|
| 543 |
)
|
src/agents/gmail_agent.py
CHANGED
|
@@ -1,8 +1,6 @@
|
|
| 1 |
-
# src/agents/gmail_agent.py
|
| 2 |
-
|
| 3 |
import os
|
| 4 |
from typing import List, Dict, Any
|
| 5 |
-
from smolagents import CodeAgent,
|
| 6 |
|
| 7 |
from src.tools.gmail_mcp_client import get_recent_emails as _get_recent_emails
|
| 8 |
from src.tools.gmail_mcp_client import search_emails_simple as _search_emails_simple
|
|
@@ -22,7 +20,6 @@ def get_recent_emails(max_results: int = 10) -> List[Dict[str, str]]:
|
|
| 22 |
List of email dictionaries with 'id', 'subject', 'sender', 'date', and 'snippet' fields.
|
| 23 |
Returns empty list if no emails found. Each email can be read in detail using read_email_content.
|
| 24 |
"""
|
| 25 |
-
# Validate input
|
| 26 |
if max_results < 1:
|
| 27 |
max_results = 1
|
| 28 |
elif max_results > 50:
|
|
@@ -45,7 +42,6 @@ def search_emails(query: str, max_results: int = 10) -> List[Dict[str, str]]:
|
|
| 45 |
List of email dictionaries with 'id', 'subject', 'sender', 'date', and 'snippet' fields.
|
| 46 |
Returns empty list if no matching emails found. Use read_email_content to get full email text.
|
| 47 |
"""
|
| 48 |
-
# Validate input
|
| 49 |
if not query or not query.strip():
|
| 50 |
print("Error: Empty search query provided")
|
| 51 |
return [{"error": "Search query cannot be empty"}]
|
|
@@ -78,15 +74,14 @@ def read_email_content(message_id: str) -> Dict[str, Any]:
|
|
| 78 |
return _read_email_content(message_id.strip())
|
| 79 |
|
| 80 |
|
| 81 |
-
# Create a simplified Gmail agent focused on reading emails only
|
| 82 |
gmail_agent = CodeAgent(
|
| 83 |
-
model=
|
| 84 |
-
|
| 85 |
-
|
| 86 |
),
|
| 87 |
tools=[get_recent_emails, search_emails, read_email_content],
|
| 88 |
name="gmail_agent",
|
| 89 |
description="Gmail agent specialized in reading and searching emails from habib.adoum01@gmail.com and news@alphasignal.ai only",
|
| 90 |
-
max_steps=6,
|
| 91 |
additional_authorized_imports=["json"],
|
| 92 |
)
|
|
|
|
|
|
|
|
|
|
| 1 |
import os
|
| 2 |
from typing import List, Dict, Any
|
| 3 |
+
from smolagents import CodeAgent, InferenceClientModel, tool
|
| 4 |
|
| 5 |
from src.tools.gmail_mcp_client import get_recent_emails as _get_recent_emails
|
| 6 |
from src.tools.gmail_mcp_client import search_emails_simple as _search_emails_simple
|
|
|
|
| 20 |
List of email dictionaries with 'id', 'subject', 'sender', 'date', and 'snippet' fields.
|
| 21 |
Returns empty list if no emails found. Each email can be read in detail using read_email_content.
|
| 22 |
"""
|
|
|
|
| 23 |
if max_results < 1:
|
| 24 |
max_results = 1
|
| 25 |
elif max_results > 50:
|
|
|
|
| 42 |
List of email dictionaries with 'id', 'subject', 'sender', 'date', and 'snippet' fields.
|
| 43 |
Returns empty list if no matching emails found. Use read_email_content to get full email text.
|
| 44 |
"""
|
|
|
|
| 45 |
if not query or not query.strip():
|
| 46 |
print("Error: Empty search query provided")
|
| 47 |
return [{"error": "Search query cannot be empty"}]
|
|
|
|
| 74 |
return _read_email_content(message_id.strip())
|
| 75 |
|
| 76 |
|
|
|
|
| 77 |
gmail_agent = CodeAgent(
|
| 78 |
+
model=InferenceClientModel(
|
| 79 |
+
provider="nebius",
|
| 80 |
+
token=os.environ["HF_TOKEN"],
|
| 81 |
),
|
| 82 |
tools=[get_recent_emails, search_emails, read_email_content],
|
| 83 |
name="gmail_agent",
|
| 84 |
description="Gmail agent specialized in reading and searching emails from habib.adoum01@gmail.com and news@alphasignal.ai only",
|
| 85 |
+
max_steps=6,
|
| 86 |
additional_authorized_imports=["json"],
|
| 87 |
)
|
src/agents/manager_agent.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# src/agents/manager_agent.py
|
| 2 |
|
| 3 |
-
from smolagents import CodeAgent,
|
| 4 |
from dotenv import load_dotenv
|
| 5 |
import os
|
| 6 |
|
|
@@ -15,9 +15,9 @@ load_dotenv()
|
|
| 15 |
# Create a single focused agent instead of complex multi-agent system
|
| 16 |
# This follows the smolagents principle: "The best agentic systems are the simplest"
|
| 17 |
manager_agent = CodeAgent(
|
| 18 |
-
model=
|
| 19 |
-
|
| 20 |
-
|
| 21 |
),
|
| 22 |
managed_agents=[web_agent, gmail_agent, bookmarks_agent, categoriser_agent],
|
| 23 |
name="digital_assistant",
|
|
|
|
| 1 |
# src/agents/manager_agent.py
|
| 2 |
|
| 3 |
+
from smolagents import CodeAgent, InferenceClientModel
|
| 4 |
from dotenv import load_dotenv
|
| 5 |
import os
|
| 6 |
|
|
|
|
| 15 |
# Create a single focused agent instead of complex multi-agent system
|
| 16 |
# This follows the smolagents principle: "The best agentic systems are the simplest"
|
| 17 |
manager_agent = CodeAgent(
|
| 18 |
+
model=InferenceClientModel(
|
| 19 |
+
provider="nebius",
|
| 20 |
+
token=os.environ["HF_TOKEN"],
|
| 21 |
),
|
| 22 |
managed_agents=[web_agent, gmail_agent, bookmarks_agent, categoriser_agent],
|
| 23 |
name="digital_assistant",
|
src/agents/web_agents.py
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
|
|
| 1 |
from smolagents import (
|
| 2 |
ToolCallingAgent,
|
| 3 |
-
|
| 4 |
WebSearchTool,
|
| 5 |
)
|
| 6 |
|
| 7 |
-
import os
|
| 8 |
|
| 9 |
-
model =
|
| 10 |
-
|
| 11 |
-
|
| 12 |
)
|
| 13 |
|
| 14 |
web_agent = ToolCallingAgent(
|
| 15 |
tools=[WebSearchTool()],
|
| 16 |
model=model,
|
| 17 |
-
max_steps=
|
| 18 |
name="web_search_agent",
|
| 19 |
description="Runs web searches for you.",
|
| 20 |
)
|
|
|
|
| 1 |
+
import os
|
| 2 |
from smolagents import (
|
| 3 |
ToolCallingAgent,
|
| 4 |
+
InferenceClientModel,
|
| 5 |
WebSearchTool,
|
| 6 |
)
|
| 7 |
|
|
|
|
| 8 |
|
| 9 |
+
model = InferenceClientModel(
|
| 10 |
+
provider="nebius",
|
| 11 |
+
token=os.environ["HF_TOKEN"],
|
| 12 |
)
|
| 13 |
|
| 14 |
web_agent = ToolCallingAgent(
|
| 15 |
tools=[WebSearchTool()],
|
| 16 |
model=model,
|
| 17 |
+
max_steps=6,
|
| 18 |
name="web_search_agent",
|
| 19 |
description="Runs web searches for you.",
|
| 20 |
)
|
src/interfaces/gradio_interface.py
CHANGED
|
@@ -173,100 +173,129 @@ def create_categories_interface():
|
|
| 173 |
def create_about_interface():
|
| 174 |
"""Create the about page interface."""
|
| 175 |
|
| 176 |
-
|
| 177 |
-
# 🧠 About ReMind
|
| 178 |
-
|
| 179 |
-
## Bring your past to mind.
|
| 180 |
|
| 181 |
-
|
| 182 |
|
| 183 |
-
-
|
|
|
|
| 184 |
|
|
|
|
| 185 |
## 🎯 What ReMind Does
|
| 186 |
|
| 187 |
### 🔖 **Smart Bookmark Management**
|
| 188 |
-
- Automatically
|
| 189 |
-
- Provides intelligent search and filtering capabilities
|
| 190 |
- Tracks bookmark statistics and usage patterns
|
| 191 |
-
- Focuses specifically on AI and technology resources
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 192 |
|
| 193 |
### 🏷️ **Intelligent Categorization**
|
| 194 |
-
|
| 195 |
-
|
| 196 |
-
1. **🔬 Research & Breakthroughs** - Latest papers
|
| 197 |
-
2. **🚀 Model Releases & Updates** - New AI models and
|
| 198 |
-
3. **🛠️ Tools, Frameworks & Platforms** - Developer
|
| 199 |
-
4. **🏭 Applications & Industry Use Cases** - Real-world AI implementations
|
| 200 |
-
5. **⚖️ Regulation, Ethics & Policy** - AI governance
|
| 201 |
-
6. **💰 Investment, Funding & M&A** - Market movements
|
| 202 |
-
7. **🏆 Benchmarks & Leaderboards** - Performance comparisons and
|
| 203 |
-
8. **🎓 Community, Events & Education** - Learning resources and
|
| 204 |
-
9. **🔒 Security, Privacy & Safety** - AI safety and
|
| 205 |
-
10. **📈 Market Trends & Analysis** - Industry insights and forecasts
|
| 206 |
-
|
| 207 |
-
### 💬 **Conversational Interface**
|
| 208 |
-
-
|
| 209 |
-
-
|
| 210 |
-
-
|
| 211 |
-
-
|
| 212 |
-
|
| 213 |
-
### 📧 **Email Integration**
|
| 214 |
-
- Browse and search through your important emails
|
| 215 |
-
- Focus on AI newsletters and updates from trusted sources
|
| 216 |
-
- Extract insights from your email-based learning resources
|
| 217 |
|
| 218 |
---
|
| 219 |
|
| 220 |
## 🔧 How It Works
|
| 221 |
|
| 222 |
-
**ReMind** is powered by **Smolagents**
|
| 223 |
|
| 224 |
-
- **🤖 Multi-
|
| 225 |
-
- **🧠 Real-time reasoning** - Watch
|
| 226 |
-
- **🔄 Dynamic categorization** -
|
| 227 |
-
- **🔍 Semantic search** - Find resources
|
|
|
|
| 228 |
|
| 229 |
---
|
| 230 |
|
| 231 |
## 🚀 Getting Started
|
| 232 |
|
| 233 |
-
1. **
|
| 234 |
-
2. **Categorize Content**:
|
| 235 |
-
3. **
|
| 236 |
-
4. **Search
|
| 237 |
-
5. **Stay
|
| 238 |
|
| 239 |
---
|
| 240 |
|
| 241 |
## 🔒 Privacy & Security
|
| 242 |
|
| 243 |
-
- **Local
|
| 244 |
-
- **Selective Email Access**: Only accesses specified trusted email sources
|
| 245 |
-
- **
|
| 246 |
-
- **Transparent Operations**: All
|
|
|
|
| 247 |
|
| 248 |
---
|
| 249 |
|
| 250 |
## 💡 Why ReMind?
|
| 251 |
|
| 252 |
-
In the fast-moving world of AI and technology, staying informed while managing information overload is challenging.
|
| 253 |
|
| 254 |
-
- **Surfaces forgotten
|
| 255 |
-
- **
|
| 256 |
-
- **
|
| 257 |
-
- **
|
| 258 |
-
- **Learns
|
| 259 |
|
| 260 |
---
|
| 261 |
|
| 262 |
-
|
| 263 |
|
| 264 |
-
**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 265 |
"""
|
| 266 |
|
| 267 |
with gr.Blocks() as about_tab:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 268 |
gr.Markdown(about_content)
|
| 269 |
-
|
| 270 |
return about_tab
|
| 271 |
|
| 272 |
|
|
@@ -327,10 +356,10 @@ def chat_with_agent(message: str, history: List) -> Generator[List, None, None]:
|
|
| 327 |
# Start with user message in history
|
| 328 |
new_history = formatted_history.copy()
|
| 329 |
|
| 330 |
-
# Show initial thinking message
|
| 331 |
thinking_message = {
|
| 332 |
"role": "assistant",
|
| 333 |
-
"content": "
|
| 334 |
}
|
| 335 |
new_history.append(thinking_message)
|
| 336 |
yield validate_message_history(new_history)
|
|
@@ -348,10 +377,10 @@ def chat_with_agent(message: str, history: List) -> Generator[List, None, None]:
|
|
| 348 |
for step in agent_stream:
|
| 349 |
step_count += 1
|
| 350 |
|
| 351 |
-
# Update thinking message with current step info
|
| 352 |
if hasattr(step, "step_number") and hasattr(step, "action"):
|
| 353 |
-
step_content = "
|
| 354 |
-
step_content += f"**Step {step.step_number}:**\n"
|
| 355 |
|
| 356 |
if hasattr(step, "thought") and step.thought:
|
| 357 |
step_content += f"💭 **Thought:** {step.thought}\n\n"
|
|
@@ -365,6 +394,7 @@ def chat_with_agent(message: str, history: List) -> Generator[List, None, None]:
|
|
| 365 |
obs_text += "..."
|
| 366 |
step_content += f"👁️ **Observation:** {obs_text}\n\n"
|
| 367 |
|
|
|
|
| 368 |
thinking_message["content"] = step_content
|
| 369 |
new_history[-1] = thinking_message
|
| 370 |
yield validate_message_history(new_history)
|
|
@@ -373,7 +403,9 @@ def chat_with_agent(message: str, history: List) -> Generator[List, None, None]:
|
|
| 373 |
# If streaming fails, fall back to regular execution
|
| 374 |
print(f"Streaming failed: {stream_error}, falling back to regular execution")
|
| 375 |
|
| 376 |
-
thinking_message["content"] =
|
|
|
|
|
|
|
| 377 |
new_history[-1] = thinking_message
|
| 378 |
yield validate_message_history(new_history)
|
| 379 |
|
|
@@ -428,7 +460,7 @@ def chat_with_agent(message: str, history: List) -> Generator[List, None, None]:
|
|
| 428 |
|
| 429 |
# Update thinking to show completion
|
| 430 |
thinking_message["content"] = (
|
| 431 |
-
"
|
| 432 |
)
|
| 433 |
new_history[-1] = thinking_message
|
| 434 |
yield validate_message_history(new_history)
|
|
@@ -448,7 +480,7 @@ def chat_with_agent(message: str, history: List) -> Generator[List, None, None]:
|
|
| 448 |
|
| 449 |
# If we get here, streaming worked, so get the final result
|
| 450 |
# The streaming should have shown all the steps, now get final answer
|
| 451 |
-
thinking_message["content"] = "
|
| 452 |
new_history[-1] = thinking_message
|
| 453 |
yield validate_message_history(new_history)
|
| 454 |
|
|
@@ -482,7 +514,7 @@ def chat_with_agent(message: str, history: List) -> Generator[List, None, None]:
|
|
| 482 |
chat_interface = gr.ChatInterface(
|
| 483 |
fn=chat_with_agent,
|
| 484 |
type="messages",
|
| 485 |
-
title="🔖
|
| 486 |
description="""
|
| 487 |
## Your Comprehensive AI Assistant! 🤖
|
| 488 |
|
|
@@ -510,7 +542,7 @@ chat_interface = gr.ChatInterface(
|
|
| 510 |
- Research topics and gather up-to-date data
|
| 511 |
|
| 512 |
---
|
| 513 |
-
**🔒 Security Note:** Email read access is limited to `
|
| 514 |
|
| 515 |
**💡 Watch the agent think in real-time** - You'll see my reasoning process, tool selection, and execution steps in collapsible sections!
|
| 516 |
""",
|
|
|
|
| 173 |
def create_about_interface():
|
| 174 |
"""Create the about page interface."""
|
| 175 |
|
| 176 |
+
intro_content = """
|
| 177 |
+
# 🧠 About ReMind - AI and Tech News Assistant
|
|
|
|
|
|
|
| 178 |
|
| 179 |
+
## Bring your AI knowledge to mind.
|
| 180 |
|
| 181 |
+
**ReMind** is your intelligent digital memory assistant that helps you rediscover, organize, and make sense of your accumulated AI and technology knowledge. In our information-rich world, we often bookmark valuable resources and receive important newsletters only to forget about them later. This system solves this problem by intelligently categorizing and surfacing your digital discoveries when you need them most.
|
| 182 |
+
"""
|
| 183 |
|
| 184 |
+
about_content = """
|
| 185 |
## 🎯 What ReMind Does
|
| 186 |
|
| 187 |
### 🔖 **Smart Bookmark Management**
|
| 188 |
+
- Automatically extracts and caches AI bookmarks from your Chrome "AI ressources" folder
|
| 189 |
+
- Provides intelligent search and filtering capabilities by domain, keywords, and categories
|
| 190 |
- Tracks bookmark statistics and usage patterns
|
| 191 |
+
- Focuses specifically on AI and technology resources with comprehensive caching system
|
| 192 |
+
|
| 193 |
+
### 📧 **Newsletter Email Integration**
|
| 194 |
+
- Securely accesses emails from trusted AI news sources (news@alphasignal.ai)
|
| 195 |
+
- Searches through AI newsletters and updates with intelligent filtering
|
| 196 |
+
- Extracts insights from email-based learning resources
|
| 197 |
+
- Provides recent email browsing and content reading capabilities
|
| 198 |
+
|
| 199 |
+
### 🌐 **Real-time Web Search**
|
| 200 |
+
- Performs live web searches for the latest AI and tech developments
|
| 201 |
+
- Combines cached knowledge with current information
|
| 202 |
+
- Supports up to 6-step search processes for comprehensive research
|
| 203 |
+
- Delivers real-time results and analysis
|
| 204 |
|
| 205 |
### 🏷️ **Intelligent Categorization**
|
| 206 |
+
The system automatically organizes your content into **10 key AI categories**:
|
| 207 |
+
|
| 208 |
+
1. **🔬 Research & Breakthroughs** - Latest papers, theoretical advances, and novel architectures
|
| 209 |
+
2. **🚀 Model Releases & Updates** - New AI models, version upgrades, and open-source checkpoints
|
| 210 |
+
3. **🛠️ Tools, Frameworks & Platforms** - Developer SDKs, libraries, cloud services, and deployment solutions
|
| 211 |
+
4. **🏭 Applications & Industry Use Cases** - Real-world AI implementations across healthcare, finance, manufacturing
|
| 212 |
+
5. **⚖️ Regulation, Ethics & Policy** - AI governance, ethical considerations, and compliance guidelines
|
| 213 |
+
6. **💰 Investment, Funding & M&A** - Market movements, startup funding, and acquisition news
|
| 214 |
+
7. **🏆 Benchmarks & Leaderboards** - Performance comparisons, academic challenges, and ranking systems
|
| 215 |
+
8. **🎓 Community, Events & Education** - Learning resources, conferences, workshops, and tutorials
|
| 216 |
+
9. **🔒 Security, Privacy & Safety** - AI safety research, adversarial attacks, and privacy protection
|
| 217 |
+
10. **📈 Market Trends & Analysis** - Industry insights, adoption rates, and market forecasts
|
| 218 |
+
|
| 219 |
+
### 💬 **Multi-Agent Conversational Interface**
|
| 220 |
+
- **Manager Agent**: Routes queries to specialized agents based on context
|
| 221 |
+
- **Bookmarks Agent**: Handles Chrome bookmark extraction, caching, and management
|
| 222 |
+
- **Gmail Agent**: Manages email access, search, and content reading
|
| 223 |
+
- **Categorizer Agent**: Provides intelligent classification with manual override capabilities
|
| 224 |
+
- **Web Search Agent**: Performs real-time web research and analysis
|
|
|
|
|
|
|
|
|
|
|
|
|
| 225 |
|
| 226 |
---
|
| 227 |
|
| 228 |
## 🔧 How It Works
|
| 229 |
|
| 230 |
+
**ReMind** is powered by HuggingFace's **Smolagents**. Here is how it works:
|
| 231 |
|
| 232 |
+
- **🤖 Multi-agent orchestration** - Specialized agents work together seamlessly
|
| 233 |
+
- **🧠 Real-time reasoning** - Watch AI agents think through problems step-by-step
|
| 234 |
+
- **🔄 Dynamic categorization** - Keyword-based classification with manual recategorization
|
| 235 |
+
- **🔍 Semantic search** - Find resources across bookmarks, emails, and web results
|
| 236 |
+
- **💾 Local caching** - Efficient JSON-based storage for offline access
|
| 237 |
|
| 238 |
---
|
| 239 |
|
| 240 |
## 🚀 Getting Started
|
| 241 |
|
| 242 |
+
1. **Update Bookmark Cache**: Import your Chrome "AI ressources" bookmarks into the local cache
|
| 243 |
+
2. **Categorize Content**: Automatically classify your AI resources into organized categories
|
| 244 |
+
3. **Access Email Updates**: Browse recent newsletters and AI news from trusted sources
|
| 245 |
+
4. **Search Across Sources**: Use natural language to find specific resources across all data sources
|
| 246 |
+
5. **Stay Current**: Combine cached knowledge with real-time web search for latest developments
|
| 247 |
|
| 248 |
---
|
| 249 |
|
| 250 |
## 🔒 Privacy & Security
|
| 251 |
|
| 252 |
+
- **Local JSON Caching**: Bookmarks processed and stored in local cache files
|
| 253 |
+
- **Selective Email Access**: Only accesses specified trusted email sources with OAuth security
|
| 254 |
+
- **Controlled Web Access**: Real-time search with responsible usage limits
|
| 255 |
+
- **Transparent Operations**: All agent operations are visible and explainable
|
| 256 |
+
- **No Data Sharing**: Personal information processed locally with secure authentication
|
| 257 |
|
| 258 |
---
|
| 259 |
|
| 260 |
## 💡 Why ReMind?
|
| 261 |
|
| 262 |
+
In the fast-moving world of AI and technology, staying informed while managing information overload is challenging. This system transforms your passive bookmark collection and newsletter subscriptions into an active, intelligent knowledge base that:
|
| 263 |
|
| 264 |
+
- **Surfaces forgotten resources** from your Chrome bookmarks
|
| 265 |
+
- **Organizes email newsletters** into actionable intelligence
|
| 266 |
+
- **Combines multiple sources** for comprehensive AI knowledge management
|
| 267 |
+
- **Provides real-time updates** through web search integration
|
| 268 |
+
- **Learns and adapts** through intelligent categorization and recategorization
|
| 269 |
|
| 270 |
---
|
| 271 |
|
| 272 |
+
## 🙏 Acknowledgments
|
| 273 |
|
| 274 |
+
Thanks to **Modal Labs**, **Hugging Face**, **Nebius**, **Anthropic**, **OpenAI**, **Hyperbolic Labs**, **MistralAI**, and **Sambanova.AI** for providing credits that power this demo.
|
| 275 |
+
|
| 276 |
+
---
|
| 277 |
+
|
| 278 |
+
*"The smartest AI system is one that helps you manage AI knowledge itself."*
|
| 279 |
+
|
| 280 |
+
**Welcome to ReMind - where your digital AI knowledge becomes your strategic advantage.**
|
| 281 |
"""
|
| 282 |
|
| 283 |
with gr.Blocks() as about_tab:
|
| 284 |
+
gr.Markdown(intro_content)
|
| 285 |
+
|
| 286 |
+
# Add the AI architecture diagram
|
| 287 |
+
gr.Markdown("## 🏗️ System Architecture")
|
| 288 |
+
gr.Image(
|
| 289 |
+
value="data/ai_diagram.png",
|
| 290 |
+
label="ReMind AI System Architecture",
|
| 291 |
+
show_label=True,
|
| 292 |
+
show_download_button=True,
|
| 293 |
+
height=400,
|
| 294 |
+
width=None,
|
| 295 |
+
interactive=False,
|
| 296 |
+
)
|
| 297 |
+
gr.Markdown("*System architecture showing the multi-agent orchestration and data flow in ReMind*")
|
| 298 |
gr.Markdown(about_content)
|
|
|
|
| 299 |
return about_tab
|
| 300 |
|
| 301 |
|
|
|
|
| 356 |
# Start with user message in history
|
| 357 |
new_history = formatted_history.copy()
|
| 358 |
|
| 359 |
+
# Show initial thinking message with spinner
|
| 360 |
thinking_message = {
|
| 361 |
"role": "assistant",
|
| 362 |
+
"content": "🔄 **Agent Planning** ⏳\n\n💫 Analyzing your request and creating execution plan...\n\n*Please wait while I process your request...*",
|
| 363 |
}
|
| 364 |
new_history.append(thinking_message)
|
| 365 |
yield validate_message_history(new_history)
|
|
|
|
| 377 |
for step in agent_stream:
|
| 378 |
step_count += 1
|
| 379 |
|
| 380 |
+
# Update thinking message with current step info and spinner
|
| 381 |
if hasattr(step, "step_number") and hasattr(step, "action"):
|
| 382 |
+
step_content = "⚡ **Agent Working** 🔄\n\n"
|
| 383 |
+
step_content += f"🔍 **Step {step.step_number}:** *In Progress...*\n\n"
|
| 384 |
|
| 385 |
if hasattr(step, "thought") and step.thought:
|
| 386 |
step_content += f"💭 **Thought:** {step.thought}\n\n"
|
|
|
|
| 394 |
obs_text += "..."
|
| 395 |
step_content += f"👁️ **Observation:** {obs_text}\n\n"
|
| 396 |
|
| 397 |
+
step_content += "⏳ *Processing next step...*"
|
| 398 |
thinking_message["content"] = step_content
|
| 399 |
new_history[-1] = thinking_message
|
| 400 |
yield validate_message_history(new_history)
|
|
|
|
| 403 |
# If streaming fails, fall back to regular execution
|
| 404 |
print(f"Streaming failed: {stream_error}, falling back to regular execution")
|
| 405 |
|
| 406 |
+
thinking_message["content"] = (
|
| 407 |
+
"⚡ **Agent Working** 🔄\n\n💫 Processing your request using available tools...\n\n⏳ *Please wait...*"
|
| 408 |
+
)
|
| 409 |
new_history[-1] = thinking_message
|
| 410 |
yield validate_message_history(new_history)
|
| 411 |
|
|
|
|
| 460 |
|
| 461 |
# Update thinking to show completion
|
| 462 |
thinking_message["content"] = (
|
| 463 |
+
"✅ **Agent Complete** 🎉\n\n✅ Request processed successfully\n✅ Response prepared"
|
| 464 |
)
|
| 465 |
new_history[-1] = thinking_message
|
| 466 |
yield validate_message_history(new_history)
|
|
|
|
| 480 |
|
| 481 |
# If we get here, streaming worked, so get the final result
|
| 482 |
# The streaming should have shown all the steps, now get final answer
|
| 483 |
+
thinking_message["content"] = "✅ **Agent Complete** 🎉\n\n✅ All steps executed\n✅ Preparing final response"
|
| 484 |
new_history[-1] = thinking_message
|
| 485 |
yield validate_message_history(new_history)
|
| 486 |
|
|
|
|
| 514 |
chat_interface = gr.ChatInterface(
|
| 515 |
fn=chat_with_agent,
|
| 516 |
type="messages",
|
| 517 |
+
title="🔖 AI and Tech News Assistant - Powered by Smolagents",
|
| 518 |
description="""
|
| 519 |
## Your Comprehensive AI Assistant! 🤖
|
| 520 |
|
|
|
|
| 542 |
- Research topics and gather up-to-date data
|
| 543 |
|
| 544 |
---
|
| 545 |
+
**🔒 Security Note:** Email read access is limited to `news@alphasignal.ai`
|
| 546 |
|
| 547 |
**💡 Watch the agent think in real-time** - You'll see my reasoning process, tool selection, and execution steps in collapsible sections!
|
| 548 |
""",
|