| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- from content_agent.business_modules import learning_review
- from content_agent.integrations.runtime_files import LocalRuntimeFileStore
- from tests.test_p8_strategy_review import _write_minimal_runtime
- from tests.test_v5_golden_corpus_baseline import _load_historical_decisions
- class FeedbackRuntime(LocalRuntimeFileStore):
- def __init__(self, *args, feedback_rows=None, **kwargs):
- super().__init__(*args, **kwargs)
- self.feedback_rows = feedback_rows or []
- def read_performance_feedback(self, run_id: str, policy_run_id: str):
- return [
- row
- for row in self.feedback_rows
- if row["run_id"] == run_id and row["policy_run_id"] == policy_run_id
- ]
- def test_strategy_review_summarizes_fake_performance_feedback(tmp_path):
- run_id = "run_feedback"
- policy_run_id = "policy_feedback"
- runtime = FeedbackRuntime(
- tmp_path / "runtime",
- feedback_rows=[
- {
- "run_id": run_id,
- "policy_run_id": policy_run_id,
- "feedback_id": "feedback_001",
- "feedback_status": "available",
- "completion_rate": 0.72,
- "share_rate": 0.08,
- "average_watch_seconds": 18.5,
- }
- ],
- )
- runtime.prepare_run(run_id)
- _write_minimal_runtime(runtime, run_id, policy_run_id)
- review = learning_review.run(run_id, policy_run_id, runtime)
- assert review["performance_feedback"]["performance_feedback_status"] == "available"
- assert review["performance_feedback"]["feedback_count"] == 1
- assert review["performance_feedback"]["average_completion_rate"] == 0.72
- assert any(
- item["recommendation_type"] == "performance_feedback"
- and item["suggested_action"] == "review_feedback_before_strategy_change"
- for item in review["recommendations"]
- )
- assert review["rule_review"]["decision_distribution"]["ADD_TO_CONTENT_POOL"] == 1
- def _fake_feedback_for_decision(decision, platform="douyin"):
- platform_content_id = decision["decision_target_id"]
- return {
- "run_id": decision["run_id"],
- "policy_run_id": decision["policy_run_id"],
- "feedback_id": f"fake_m4_{decision['policy_run_id']}_{platform_content_id}",
- "feedback_source": "m4_fake_feedback",
- "feedback_status": "available",
- "platform": platform,
- "platform_content_id": platform_content_id,
- "completion_rate": 0.72,
- }
- def _join_feedback(feedback_rows, discovered_rows, *, use_content_discovery_id=False):
- key_field = "content_discovery_id" if use_content_discovery_id else "platform_content_id"
- discovered_keys = {
- (row["run_id"], row["policy_run_id"], row.get(key_field))
- for row in discovered_rows
- }
- return [
- row
- for row in feedback_rows
- if (row["run_id"], row["policy_run_id"], row["platform_content_id"]) in discovered_keys
- ]
- def test_fake_feedback_join_matches_m0_golden_samples():
- decisions = _load_historical_decisions("v4_douyin_57663")
- wanted_actions = {
- "ADD_TO_CONTENT_POOL",
- "KEEP_CONTENT_FOR_REVIEW",
- "REJECT_CONTENT",
- "TECHNICAL_RETRY_REQUIRED",
- }
- selected = []
- seen_actions = set()
- for decision in decisions:
- action = decision["decision_action"]
- if action in wanted_actions and action not in seen_actions:
- selected.append(decision)
- seen_actions.add(action)
- if seen_actions == wanted_actions:
- break
- feedback_rows = [_fake_feedback_for_decision(decision) for decision in selected]
- discovered_rows = [
- {
- "run_id": decision["run_id"],
- "policy_run_id": decision["policy_run_id"],
- "platform_content_id": decision["decision_target_id"],
- "content_discovery_id": f"discovery_{decision['decision_target_id']}",
- }
- for decision in selected
- ]
- assert seen_actions == wanted_actions
- assert _join_feedback(feedback_rows, discovered_rows) == feedback_rows
- def test_fake_feedback_join_uses_platform_content_id_not_content_discovery_id():
- decision = _load_historical_decisions("v4_douyin_57663")[0]
- feedback = [_fake_feedback_for_decision(decision)]
- discovered = [
- {
- "run_id": decision["run_id"],
- "policy_run_id": decision["policy_run_id"],
- "platform_content_id": decision["decision_target_id"],
- "content_discovery_id": f"discovery_{decision['decision_target_id']}",
- }
- ]
- assert _join_feedback(feedback, discovered, use_content_discovery_id=True) == []
|