test_synthesis_reuse_threshold.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from copy import deepcopy
  2. import json
  3. import unittest
  4. from src.step3_question_answer.synthesis_input import (
  5. compact_payload, expand_text_entry, text_reuse_prompt, text_reuse_minimum, TEXT_REUSE_RULE,
  6. )
  7. from src.step3_question_answer.tests.test_synthesis_text_reuse import entry
  8. from src.step4_api.logging import summary_diagnostics
  9. class SynthesisReuseThresholdTests(unittest.TestCase):
  10. def test_threshold_includes_instruction_cost_and_scales_with_payload(self):
  11. self.assertEqual(text_reuse_minimum(1000), 1024)
  12. self.assertEqual(text_reuse_minimum(40000), 2000)
  13. self.assertEqual(text_reuse_minimum(40001), 2001)
  14. # The observed request saved 773 JSON bytes but paid 506 rule bytes.
  15. # This is a general size gate; no session ID or business keyword routes it.
  16. self.assertLess(773 - len(TEXT_REUSE_RULE.encode()), text_reuse_minimum(40000))
  17. def test_low_gain_keeps_plain_input_and_reports_only_numeric_skip_metadata(self):
  18. payload = {'evidence': [entry()]}
  19. before = deepcopy(payload)
  20. diagnostics = {}
  21. result, _ = compact_payload(payload, diagnostics)
  22. self.assertEqual(result, before)
  23. self.assertEqual(payload, before)
  24. self.assertEqual(text_reuse_prompt('任务', result), '任务')
  25. self.assertEqual(diagnostics['text_reuse_applied'], 0)
  26. self.assertLess(diagnostics['text_reuse_candidate_net_bytes'], diagnostics['text_reuse_minimum_net_bytes'])
  27. safe = summary_diagnostics({**diagnostics, 'text_pool': {'t0': '合成正文'}})
  28. self.assertEqual(safe, diagnostics)
  29. def test_large_unique_context_blocks_low_relative_gain_without_dropping_it(self):
  30. payload = {'evidence': [entry(i) for i in range(3)],
  31. 'conversation_context': {'note': ''.join(f'唯一背景{i}。' for i in range(5000))}}
  32. before = deepcopy(payload)
  33. result, _ = compact_payload(payload)
  34. self.assertEqual(result, before)
  35. self.assertNotIn('text_pool', str(result.keys()))
  36. def test_meaningful_gain_still_encodes_and_roundtrips(self):
  37. payload = {'cards': [entry(i) for i in range(3)]}
  38. diagnostics = {}
  39. result, _ = compact_payload(payload, diagnostics)
  40. self.assertEqual(diagnostics['text_reuse_applied'], 1)
  41. self.assertGreaterEqual(diagnostics['text_reuse_candidate_net_bytes'], diagnostics['text_reuse_minimum_net_bytes'])
  42. self.assertEqual([expand_text_entry(e) for e in result['cards']], payload['cards'])
  43. before = len(json.dumps(payload, ensure_ascii=False).encode())
  44. after = len(json.dumps(result, ensure_ascii=False).encode()) + len(TEXT_REUSE_RULE.encode())
  45. self.assertLess(after, before)