UserSyncUI / tests /test_content_engine.py
AUXteam's picture
Upload folder using huggingface_hub
c1d0c23 verified
import pytest
from unittest.mock import MagicMock, patch
from tinytroupe.content_generation import ContentVariantGenerator
from tinytroupe.variant_optimizer import VariantOptimizer
from tinytroupe.ml_models import EngagementPredictor
from tinytroupe.agent.social_types import Content
from tinytroupe.agent import TinyPerson
@pytest.fixture
def mock_llm():
with patch("tinytroupe.openai_utils.client") as mock:
client = MagicMock()
mock.return_value = client
client.send_message.return_value = {"content": "Rewritten content variant"}
yield client
def test_content_variant_generation(mock_llm):
generator = ContentVariantGenerator()
original = "This is a test post."
variants = generator.generate_variants(original, num_variants=3)
assert len(variants) == 3
assert variants[0].text == "Rewritten content variant"
assert variants[0].original_content == original
def test_variant_optimization(mock_llm):
TinyPerson.clear_agents()
predictor = EngagementPredictor()
optimizer = VariantOptimizer(predictor)
personas = [TinyPerson("User1"), TinyPerson("User2")]
for p in personas:
p._persona.update({"age": 25, "occupation": "Tester", "nationality": "US", "residence": "NY"})
from tinytroupe.content_generation import ContentVariant
variants = [
ContentVariant("Variant 1", "strategy", {}, "original"),
ContentVariant("Variant 2", "strategy", {}, "original")
]
# Mock predictor to return different scores for different variants
with patch.object(EngagementPredictor, 'predict') as mock_predict:
mock_predict.side_effect = [0.8, 0.7, 0.4, 0.5] # V1 for P1, P2; V2 for P1, P2
from tinytroupe.social_network import NetworkTopology
network = NetworkTopology()
ranked = optimizer.rank_variants_for_audience(variants, personas, network)
assert len(ranked) == 2
assert ranked[0].variant.text == "Variant 1"
assert ranked[0].score == 0.75 # (0.8 + 0.7) / 2
assert ranked[1].variant.text == "Variant 2"
assert ranked[1].score == 0.45 # (0.4 + 0.5) / 2