tiny_factory / tinytroupe /features.py
AUXteam's picture
Upload folder using huggingface_hub
e5ab379 verified
from typing import Dict, Any, List
import numpy as np
from datetime import datetime
from tinytroupe.agent import TinyPerson
from tinytroupe.agent.social_types import Content
from tinytroupe.social_network import NetworkTopology
class ContentFeatureExtractor:
def extract(self, content: Content) -> Dict[str, float]:
"""Extract all content features"""
return {
"word_count": float(len(content.text.split())),
"has_image": 1.0 if content.images else 0.0,
"has_video": 1.0 if content.video_url else 0.0,
"has_link": 1.0 if content.external_links else 0.0,
"sentiment_score": content.sentiment,
"num_hashtags": float(len(content.hashtags)),
"is_weekend": 1.0 if content.timestamp.weekday() >= 5 else 0.0,
}
class PersonaFeatureExtractor:
def extract(self, persona: TinyPerson) -> Dict[str, float]:
"""Extract persona features"""
return {
"age": float(persona._persona.get("age") or 30),
"num_connections": float(len(persona.social_connections)),
"influence_score": persona.influence_metrics.authority,
"engagement_rate": persona.engagement_patterns.get("overall_rate", 0.0),
}
class InteractionFeatureExtractor:
def extract(self, persona: TinyPerson, content: Content, network: NetworkTopology) -> Dict[str, float]:
"""Extract features from persona-content interaction context"""
return {
"topic_alignment": persona.get_content_affinity(content),
# "num_friends_engaged": ...
}