test_mission_factory.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import json
  2. from datetime import UTC, datetime
  3. from script_build_host.application.mission_factory import ScriptMissionFactory
  4. from script_build_host.domain.input_snapshot import ScriptBuildInputSnapshotV1
  5. from script_build_host.domain.records import MissionBinding
  6. def _snapshot() -> ScriptBuildInputSnapshotV1:
  7. return ScriptBuildInputSnapshotV1(
  8. snapshot_id="11",
  9. script_build_id=4,
  10. execution_id=1,
  11. topic_build_id=2,
  12. topic_id=3,
  13. topic={
  14. "topic": {
  15. "id": 3,
  16. "result": "真实嵌套选题结果",
  17. "topic_direction": "fallback",
  18. }
  19. },
  20. account={"account_name": "每天心理学"},
  21. persona_points=(),
  22. section_patterns=(),
  23. strategies=(),
  24. prompt_manifest=(),
  25. datasource_manifest={},
  26. model_manifest={
  27. "presets": {
  28. "script_planner": {
  29. "model": "planner-model",
  30. "temperature": 0.1,
  31. "max_iterations": 42,
  32. }
  33. }
  34. },
  35. canonical_sha256="sha256:" + "b" * 64,
  36. created_at=datetime.now(UTC),
  37. )
  38. def _binding() -> MissionBinding:
  39. now = datetime.now(UTC)
  40. return MissionBinding(
  41. binding_id=1,
  42. script_build_id=4,
  43. root_trace_id="root",
  44. input_snapshot_id=11,
  45. active_direction_artifact_version_id=None,
  46. accepted_root_artifact_version_id=None,
  47. engine_version="test",
  48. schema_version="v1",
  49. created_at=now,
  50. updated_at=now,
  51. )
  52. def test_factory_reads_nested_real_topic_and_does_not_double_prefix_digest() -> None:
  53. factory = ScriptMissionFactory()
  54. spec = factory.build_root_task_spec(_snapshot())
  55. assert "真实嵌套选题结果" in str(spec["objective"])
  56. assert "title" not in str(spec)
  57. assert "workflow" not in str(spec).lower()
  58. message = json.loads(factory.build_planner_message(_binding(), _snapshot()))
  59. assert message["input_sha256"] == "sha256:" + "b" * 64
  60. config = factory.build_run_config(_binding(), _snapshot())
  61. assert config.agent_type == "script_planner"
  62. assert config.model == "planner-model"
  63. assert config.temperature == 0.1
  64. assert config.max_iterations == 42
  65. assert config.new_trace_id == "root"
  66. assert config.enable_memory is False
  67. assert config.enable_research_flow is False