feat: Add Alateya, Clan, Eonarch agents + fix gateway-router connection

## Agents Added
- Alateya: R&D, biotech, innovations
- Clan (Spirit): Community spirit agent
- Eonarch: Consciousness evolution agent

## Changes
- docker-compose.node1.yml: Added tokens for all 3 new agents
- gateway-bot/http_api.py: Added configs and webhook endpoints
- gateway-bot/clan_prompt.txt: New prompt file
- gateway-bot/eonarch_prompt.txt: New prompt file

## Fixes
- Fixed ROUTER_URL from :9102 to :8000 (internal container port)
- All 9 Telegram agents now working

## Documentation
- Created PROJECT-MASTER-INDEX.md - single entry point
- Added various status documents and scripts

Tokens configured:
- Helion, NUTRA, Agromatrix (existing)
- Alateya, Clan, Eonarch (new)
- Druid, GreenFood, DAARWIZZ (configured)
This commit is contained in:
Apple
2026-01-28 06:40:34 -08:00
parent 4aeb69e7ae
commit 0c8bef82f4
120 changed files with 21905 additions and 425 deletions

View File

@@ -4,49 +4,45 @@ Uses SentenceTransformers via Haystack
"""
import logging
from typing import Optional
from typing import Optional, List, Dict, Any
from haystack.components.embedders import SentenceTransformersTextEmbedder
from sentence_transformers import SentenceTransformer
from app.core.config import settings
logger = logging.getLogger(__name__)
class SimpleEmbedder:
def __init__(self, model_name: str, device: str) -> None:
self.model = SentenceTransformer(model_name, device=device)
def run(self, texts: Optional[List[str]] = None, text: Optional[str] = None) -> Dict[str, Any]:
if texts is not None:
embeddings = self.model.encode(texts, convert_to_numpy=True).tolist()
return {"embeddings": embeddings}
if text is not None:
embedding = self.model.encode([text], convert_to_numpy=True).tolist()
return {"embedding": embedding}
return {"embeddings": []}
# Global embedder instance
_text_embedder: Optional[SentenceTransformersTextEmbedder] = None
_text_embedder: Optional[SimpleEmbedder] = None
def get_text_embedder() -> SentenceTransformersTextEmbedder:
"""
Get or create SentenceTransformersTextEmbedder instance
Returns:
SentenceTransformersTextEmbedder configured with embedding model
"""
def get_text_embedder() -> SimpleEmbedder:
global _text_embedder
if _text_embedder is not None:
return _text_embedder
logger.info(f"Loading embedding model: {settings.EMBED_MODEL_NAME}")
logger.info(f"Device: {settings.EMBED_DEVICE}")
try:
_text_embedder = SentenceTransformersTextEmbedder(
model=settings.EMBED_MODEL_NAME,
device=settings.EMBED_DEVICE,
)
logger.info("Text embedder initialized successfully")
return _text_embedder
except Exception as e:
logger.error(f"Failed to initialize TextEmbedder: {e}", exc_info=True)
raise RuntimeError(f"TextEmbedder initialization failed: {e}") from e
_text_embedder = SimpleEmbedder(settings.EMBED_MODEL_NAME, settings.EMBED_DEVICE)
logger.info("Text embedder initialized successfully")
return _text_embedder
def reset_embedder():
"""Reset global embedder instance (for testing)"""
global _text_embedder
_text_embedder = None