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