data-designer-engine 0.9.5__tar.gz → 0.9.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/PKG-INFO +3 -3
  2. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/pyproject.toml +1 -1
  3. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/dataset_builder.py +1 -0
  4. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/factory.py +1 -1
  5. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/errors.py +1 -22
  6. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/recipes/response_recipes.py +3 -2
  7. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/utils.py +23 -0
  8. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/gsonschema/schema_transformers.py +5 -4
  9. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/gsonschema/validators.py +86 -21
  10. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/managed_dataset_generator.py +7 -1
  11. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/entities/dataset_based_person_fields.py +17 -3
  12. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/generator.py +9 -6
  13. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/storage/artifact_storage.py +26 -0
  14. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/validators/python.py +8 -6
  15. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/utils/test_prompt_renderer.py +21 -0
  16. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_factory.py +11 -1
  17. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/recipes/test_response_recipes.py +115 -1
  18. data_designer_engine-0.9.6/tests/engine/models/test_import_order.py +38 -0
  19. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/gsonschema/test_schema_transformers.py +28 -3
  20. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/gsonschema/test_validators.py +147 -0
  21. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/test_managed_dataset_generator.py +17 -1
  22. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/test_generator.py +1 -1
  23. data_designer_engine-0.9.6/tests/engine/sampling_gen/test_generator_rounding.py +197 -0
  24. data_designer_engine-0.9.6/tests/engine/sampling_gen/test_people_gen.py +155 -0
  25. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/storage/test_artifact_storage.py +94 -1
  26. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/validators/test_python.py +53 -0
  27. data_designer_engine-0.9.5/tests/engine/sampling_gen/test_people_gen.py +0 -56
  28. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/.gitignore +0 -0
  29. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/README.md +0 -0
  30. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/__init__.py +0 -0
  31. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/analysis/column_profilers/base.py +0 -0
  32. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/analysis/column_profilers/judge_score_profiler.py +0 -0
  33. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/analysis/column_profilers/registry.py +0 -0
  34. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/analysis/column_statistics.py +0 -0
  35. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/analysis/dataset_profiler.py +0 -0
  36. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/analysis/errors.py +0 -0
  37. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/analysis/utils/column_statistics_calculations.py +0 -0
  38. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/analysis/utils/judge_score_processing.py +0 -0
  39. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/capacity.py +0 -0
  40. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/__init__.py +0 -0
  41. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/generators/__init__.py +0 -0
  42. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/generators/base.py +0 -0
  43. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/generators/custom.py +0 -0
  44. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/generators/embedding.py +0 -0
  45. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/generators/expression.py +0 -0
  46. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/generators/image.py +0 -0
  47. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/generators/llm_completion.py +0 -0
  48. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/generators/samplers.py +0 -0
  49. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/generators/seed_dataset.py +0 -0
  50. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/generators/validation.py +0 -0
  51. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/registry.py +0 -0
  52. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/utils/errors.py +0 -0
  53. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/utils/generator_classification.py +0 -0
  54. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/utils/judge_score_factory.py +0 -0
  55. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/column_generators/utils/prompt_renderer.py +0 -0
  56. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/compiler.py +0 -0
  57. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/configurable_task.py +0 -0
  58. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/context.py +0 -0
  59. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/async_scheduler.py +0 -0
  60. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/errors.py +0 -0
  61. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/multi_column_configs.py +0 -0
  62. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/row_group_plan.py +0 -0
  63. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/scheduling/completion.py +0 -0
  64. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/scheduling/queue.py +0 -0
  65. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/scheduling/resolver.py +0 -0
  66. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/scheduling/resources.py +0 -0
  67. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/scheduling/task_admission.py +0 -0
  68. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/scheduling/task_model.py +0 -0
  69. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/scheduling/task_policies.py +0 -0
  70. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/utils/__init__.py +0 -0
  71. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/utils/async_concurrency.py +0 -0
  72. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/utils/concurrency.py +0 -0
  73. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/utils/config_compiler.py +0 -0
  74. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/utils/errors.py +0 -0
  75. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/utils/execution_graph.py +0 -0
  76. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/utils/processor_runner.py +0 -0
  77. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/utils/row_group_buffer.py +0 -0
  78. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/utils/skip_evaluator.py +0 -0
  79. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/dataset_builders/utils/skip_tracker.py +0 -0
  80. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/errors.py +0 -0
  81. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/mcp/__init__.py +0 -0
  82. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/mcp/errors.py +0 -0
  83. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/mcp/facade.py +0 -0
  84. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/mcp/factory.py +0 -0
  85. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/mcp/io.py +0 -0
  86. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/mcp/registry.py +0 -0
  87. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/model_provider.py +0 -0
  88. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/__init__.py +0 -0
  89. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/__init__.py +0 -0
  90. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/adapters/__init__.py +0 -0
  91. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/adapters/anthropic.py +0 -0
  92. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/adapters/anthropic_translation.py +0 -0
  93. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/adapters/http_helpers.py +0 -0
  94. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/adapters/http_model_client.py +0 -0
  95. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/adapters/httpx_sharding.py +0 -0
  96. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/adapters/openai_compatible.py +0 -0
  97. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/base.py +0 -0
  98. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/errors.py +0 -0
  99. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/model_request_executor.py +0 -0
  100. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/parsing.py +0 -0
  101. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/retry.py +0 -0
  102. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/clients/types.py +0 -0
  103. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/facade.py +0 -0
  104. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/factory.py +0 -0
  105. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/parsers/__init__.py +0 -0
  106. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/parsers/errors.py +0 -0
  107. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/parsers/parser.py +0 -0
  108. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/parsers/postprocessors.py +0 -0
  109. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/parsers/tag_parsers.py +0 -0
  110. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/parsers/types.py +0 -0
  111. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/recipes/base.py +0 -0
  112. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/registry.py +0 -0
  113. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/request_admission/config.py +0 -0
  114. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/request_admission/controller.py +0 -0
  115. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/request_admission/limits.py +0 -0
  116. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/request_admission/outcomes.py +0 -0
  117. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/request_admission/pressure.py +0 -0
  118. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/request_admission/queue.py +0 -0
  119. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/request_admission/resolver.py +0 -0
  120. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/request_admission/resources.py +0 -0
  121. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/resources.py +0 -0
  122. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/telemetry.py +0 -0
  123. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/usage.py +0 -0
  124. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/models/usage_events.py +0 -0
  125. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/observability.py +0 -0
  126. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/__init__.py +0 -0
  127. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/ginja/__init__.py +0 -0
  128. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/ginja/ast.py +0 -0
  129. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/ginja/environment.py +0 -0
  130. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/ginja/exceptions.py +0 -0
  131. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/ginja/record.py +0 -0
  132. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/gsonschema/__init__.py +0 -0
  133. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/gsonschema/exceptions.py +0 -0
  134. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/gsonschema/types.py +0 -0
  135. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/processors/__init__.py +0 -0
  136. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/processors/base.py +0 -0
  137. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/processors/drop_columns.py +0 -0
  138. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/processors/registry.py +0 -0
  139. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/processors/schema_transform.py +0 -0
  140. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/processing/utils.py +0 -0
  141. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/progress/__init__.py +0 -0
  142. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/progress/reporter.py +0 -0
  143. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/progress/terminal/__init__.py +0 -0
  144. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/progress/terminal/throughput_panel.py +0 -0
  145. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/progress/tracker.py +0 -0
  146. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/readiness.py +0 -0
  147. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/registry/base.py +0 -0
  148. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/registry/data_designer_registry.py +0 -0
  149. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/registry/errors.py +0 -0
  150. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/__init__.py +0 -0
  151. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/agent_rollout/__init__.py +0 -0
  152. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/agent_rollout/atif.py +0 -0
  153. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/agent_rollout/base.py +0 -0
  154. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/agent_rollout/claude_code.py +0 -0
  155. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/agent_rollout/codex.py +0 -0
  156. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/agent_rollout/hermes_agent.py +0 -0
  157. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/agent_rollout/pi_coding_agent.py +0 -0
  158. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/agent_rollout/registry.py +0 -0
  159. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/agent_rollout/types.py +0 -0
  160. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/agent_rollout/utils.py +0 -0
  161. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/person_reader.py +0 -0
  162. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/resource_provider.py +0 -0
  163. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/resources/seed_reader.py +0 -0
  164. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/column.py +0 -0
  165. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/constraints.py +0 -0
  166. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/data_sources/base.py +0 -0
  167. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/data_sources/errors.py +0 -0
  168. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/data_sources/sources.py +0 -0
  169. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/entities/__init__.py +0 -0
  170. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/entities/assets/zip_area_code_map.parquet +0 -0
  171. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/entities/email_address_utils.py +0 -0
  172. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/entities/errors.py +0 -0
  173. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/entities/national_id_utils.py +0 -0
  174. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/entities/person.py +0 -0
  175. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/entities/phone_number.py +0 -0
  176. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/errors.py +0 -0
  177. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/jinja_utils.py +0 -0
  178. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/people_gen.py +0 -0
  179. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/person_constants.py +0 -0
  180. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/schema.py +0 -0
  181. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/schema_builder.py +0 -0
  182. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/sampling_gen/utils.py +0 -0
  183. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/secret_resolver.py +0 -0
  184. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/storage/__init__.py +0 -0
  185. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/storage/media_storage.py +0 -0
  186. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/testing/__init__.py +0 -0
  187. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/testing/fixtures.py +0 -0
  188. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/testing/observability.py +0 -0
  189. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/testing/seed_readers.py +0 -0
  190. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/testing/stubs.py +0 -0
  191. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/testing/utils.py +0 -0
  192. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/utils/__init__.py +0 -0
  193. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/utils/token_counting.py +0 -0
  194. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/validation.py +0 -0
  195. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/validators/__init__.py +0 -0
  196. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/validators/base.py +0 -0
  197. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/validators/local_callable.py +0 -0
  198. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/validators/remote.py +0 -0
  199. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/src/data_designer/engine/validators/sql.py +0 -0
  200. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/__init__.py +0 -0
  201. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/conftest.py +0 -0
  202. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/__init__.py +0 -0
  203. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/column_profilers/test_base.py +0 -0
  204. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/column_profilers/test_judge_score_profiler.py +0 -0
  205. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/conftest.py +0 -0
  206. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/test_column_statistics_calculator.py +0 -0
  207. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/test_data/artifacts/dataset/column_configs.json +0 -0
  208. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/test_data/artifacts/dataset/dataset.json +0 -0
  209. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/test_data/artifacts/dataset/metadata.json +0 -0
  210. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/test_dataset_profiler.py +0 -0
  211. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/test_errors.py +0 -0
  212. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/utils/test_column_statistics_calculations.py +0 -0
  213. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/analysis/utils/test_judge_score_processing.py +0 -0
  214. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/__init__.py +0 -0
  215. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/test_async_generators.py +0 -0
  216. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/test_column_generator_base.py +0 -0
  217. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/test_custom.py +0 -0
  218. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/test_embedding.py +0 -0
  219. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/test_expression.py +0 -0
  220. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/test_image.py +0 -0
  221. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/test_llm_completion_generators.py +0 -0
  222. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/test_samplers.py +0 -0
  223. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/test_seed_dataset.py +0 -0
  224. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/generators/test_validation.py +0 -0
  225. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/test_registry.py +0 -0
  226. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/utils/test_column_generator_errors.py +0 -0
  227. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/utils/test_generator_classification.py +0 -0
  228. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/column_generators/utils/test_judge_score_factory.py +0 -0
  229. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/conftest.py +0 -0
  230. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/scheduling/test_completion.py +0 -0
  231. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/scheduling/test_queue.py +0 -0
  232. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/scheduling/test_resolver.py +0 -0
  233. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/scheduling/test_resources.py +0 -0
  234. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/scheduling/test_task_admission.py +0 -0
  235. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/scheduling/test_task_model.py +0 -0
  236. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/scheduling/test_task_policies.py +0 -0
  237. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/test_async_builder_integration.py +0 -0
  238. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/test_async_scheduler.py +0 -0
  239. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/test_dataset_builder.py +0 -0
  240. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/test_multi_column_configs.py +0 -0
  241. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/utils/test_concurrency.py +0 -0
  242. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/utils/test_config_compiler.py +0 -0
  243. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/utils/test_execution_graph.py +0 -0
  244. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/utils/test_row_group_buffer.py +0 -0
  245. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/utils/test_skip_evaluator.py +0 -0
  246. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/utils/test_skip_tracker.py +0 -0
  247. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/dataset_builders/utils/test_topological_sort.py +0 -0
  248. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/mcp/conftest.py +0 -0
  249. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/mcp/test_mcp_facade.py +0 -0
  250. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/mcp/test_mcp_factory.py +0 -0
  251. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/mcp/test_mcp_io.py +0 -0
  252. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/mcp/test_mcp_registry.py +0 -0
  253. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/__init__.py +0 -0
  254. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/__init__.py +0 -0
  255. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/conftest.py +0 -0
  256. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_anthropic.py +0 -0
  257. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_anthropic_translation.py +0 -0
  258. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_client_errors.py +0 -0
  259. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_httpx_sharding.py +0 -0
  260. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_model_request_executor.py +0 -0
  261. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_native_http_clients.py +0 -0
  262. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_openai_compatible.py +0 -0
  263. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_parsing.py +0 -0
  264. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_retry.py +0 -0
  265. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/clients/test_types.py +0 -0
  266. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/conftest.py +0 -0
  267. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/parsers/test_parser.py +0 -0
  268. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/parsers/test_parsers_types.py +0 -0
  269. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/parsers/test_postprocessors.py +0 -0
  270. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/parsers/test_tag_parsers.py +0 -0
  271. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/recipes/test_recipe_base.py +0 -0
  272. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/request_admission/test_controller.py +0 -0
  273. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/request_admission/test_request_queue.py +0 -0
  274. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/stub_secrets.json +0 -0
  275. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/test_facade.py +0 -0
  276. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/test_model_errors.py +0 -0
  277. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/test_model_registry.py +0 -0
  278. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/test_model_utils.py +0 -0
  279. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/test_telemetry.py +0 -0
  280. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/models/test_usage.py +0 -0
  281. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/__init__.py +0 -0
  282. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/ginja/__init__.py +0 -0
  283. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/ginja/test_ast.py +0 -0
  284. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/ginja/test_environment.py +0 -0
  285. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/ginja/test_exceptions.py +0 -0
  286. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/ginja/test_record.py +0 -0
  287. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/gsonschema/__init__.py +0 -0
  288. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/gsonschema/test_exceptions.py +0 -0
  289. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/gsonschema/test_types.py +0 -0
  290. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/processors/__init__.py +0 -0
  291. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/processors/test_drop_columns.py +0 -0
  292. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/processors/test_registry.py +0 -0
  293. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/processors/test_schema_transform.py +0 -0
  294. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/processing/test_utils.py +0 -0
  295. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/progress/terminal/test_throughput_panel.py +0 -0
  296. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/progress/test_tracker.py +0 -0
  297. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/registry/__init__.py +0 -0
  298. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/registry/conftest.py +0 -0
  299. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/registry/test_base.py +0 -0
  300. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/registry/test_data_designer_registry.py +0 -0
  301. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/registry/test_errors.py +0 -0
  302. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/__init__.py +0 -0
  303. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/agent_rollout/__init__.py +0 -0
  304. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/agent_rollout/test_atif.py +0 -0
  305. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/agent_rollout/test_claude_code.py +0 -0
  306. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/agent_rollout/test_codex.py +0 -0
  307. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/agent_rollout/test_hermes_agent.py +0 -0
  308. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/agent_rollout/test_pi_coding_agent.py +0 -0
  309. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/agent_rollout/test_utils.py +0 -0
  310. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/conftest.py +0 -0
  311. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/test_person_reader.py +0 -0
  312. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/test_resource_provider.py +0 -0
  313. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/resources/test_seed_reader.py +0 -0
  314. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/conftest.py +0 -0
  315. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/data_sources/test_sampler_errors.py +0 -0
  316. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/data_sources/test_sources.py +0 -0
  317. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/entities/test_email_address_utils.py +0 -0
  318. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/entities/test_national_id_utils.py +0 -0
  319. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/entities/test_person.py +0 -0
  320. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/entities/test_phone_number.py +0 -0
  321. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/test_column.py +0 -0
  322. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/test_constraints.py +0 -0
  323. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/test_jinja_utils.py +0 -0
  324. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/test_schema.py +0 -0
  325. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/sampling_gen/test_utils.py +0 -0
  326. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/storage/__init__.py +0 -0
  327. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/storage/test_media_storage.py +0 -0
  328. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/test_capacity.py +0 -0
  329. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/test_compiler.py +0 -0
  330. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/test_configurable_task.py +0 -0
  331. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/test_dataset_metadata.py +0 -0
  332. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/test_engine_errors.py +0 -0
  333. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/test_model_provider.py +0 -0
  334. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/test_observability.py +0 -0
  335. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/test_readiness.py +0 -0
  336. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/test_secret_resolver.py +0 -0
  337. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/test_validation.py +0 -0
  338. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/testing/test_plugin_testing_utils.py +0 -0
  339. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/utils/test_token_counting.py +0 -0
  340. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/validators/test_local_callable.py +0 -0
  341. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/validators/test_remote.py +0 -0
  342. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/engine/validators/test_sql.py +0 -0
  343. {data_designer_engine-0.9.5 → data_designer_engine-0.9.6}/tests/test_plugin_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: data-designer-engine
3
- Version: 0.9.5
3
+ Version: 0.9.6
4
4
  Summary: Generation engine for DataDesigner synthetic data generation
5
5
  License-Expression: Apache-2.0
6
6
  Classifier: Development Status :: 4 - Beta
@@ -16,7 +16,7 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
16
16
  Requires-Python: >=3.10
17
17
  Requires-Dist: anyascii<1,>=0.3.3
18
18
  Requires-Dist: asciichartpy<2,>=1.5.25
19
- Requires-Dist: data-designer-config==0.9.5
19
+ Requires-Dist: data-designer-config==0.9.6
20
20
  Requires-Dist: duckdb<2,>=1.5.0
21
21
  Requires-Dist: faker<21,>=20.1.0
22
22
  Requires-Dist: fsspec<2027,>=2026.6.0
@@ -29,7 +29,7 @@ Requires-Dist: jsonpath-rust-bindings<2,>=1.0
29
29
  Requires-Dist: jsonschema<5,>=4.0.0
30
30
  Requires-Dist: lxml<7,>=6.1.1
31
31
  Requires-Dist: marko<3,>=2.1.2
32
- Requires-Dist: mcp<2,>=1.29.0
32
+ Requires-Dist: mcp<2,>=1.30.0
33
33
  Requires-Dist: networkx<4,>=3.0
34
34
  Requires-Dist: numpy<3,>=1.23.5
35
35
  Requires-Dist: pandas<4,>=2.3.3
@@ -48,7 +48,7 @@ dependencies = [
48
48
  "jsonschema>=4.0.0,<5",
49
49
  "lxml>=6.1.1,<7", # 6.1.1 fixes CVE-2026-49825
50
50
  "marko>=2.1.2,<3",
51
- "mcp>=1.29.0,<2", # 1.29.0 fixes MCP security advisories
51
+ "mcp>=1.30.0,<2", # 1.30.0 fixes CVE-2026-59951
52
52
  "networkx>=3.0,<4",
53
53
  "numpy>=1.23.5,<3",
54
54
  "pandas>=2.3.3,<4",
@@ -328,6 +328,7 @@ class DatasetBuilder:
328
328
  if self._post_generation_processed_resume_result(resume, num_records) is not None:
329
329
  return self.artifact_storage.final_dataset_path
330
330
 
331
+ self.artifact_storage.create_dataset_directory(resume=resume)
331
332
  self._write_builder_config()
332
333
 
333
334
  # Set media storage mode based on parameters
@@ -12,8 +12,8 @@ from data_designer.engine.models.clients.adapters.openai_compatible import OpenA
12
12
  from data_designer.engine.models.clients.base import ModelClient
13
13
  from data_designer.engine.models.clients.model_request_executor import ModelRequestExecutor
14
14
  from data_designer.engine.models.clients.retry import RetryConfig
15
- from data_designer.engine.models.errors import FormattedLLMErrorMessage
16
15
  from data_designer.engine.models.request_admission.controller import RequestAdmissionController
16
+ from data_designer.engine.models.utils import FormattedLLMErrorMessage
17
17
  from data_designer.engine.observability import RequestAdmissionEventSink
18
18
  from data_designer.engine.secret_resolver import SecretResolver
19
19
 
@@ -8,11 +8,9 @@ from collections.abc import Callable
8
8
  from functools import wraps
9
9
  from typing import Any, NoReturn
10
10
 
11
- from pydantic import BaseModel
12
-
13
11
  from data_designer.engine.errors import DataDesignerError
14
12
  from data_designer.engine.models.clients.errors import ProviderError, ProviderErrorKind, SyncClientUnavailableError
15
- from data_designer.engine.models.utils import GenerationTruncationReason
13
+ from data_designer.engine.models.utils import FormattedLLMErrorMessage, GenerationTruncationReason
16
14
 
17
15
  logger = logging.getLogger(__name__)
18
16
 
@@ -152,25 +150,6 @@ RETRYABLE_MODEL_ERRORS: tuple[type[Exception], ...] = (
152
150
  )
153
151
 
154
152
 
155
- class FormattedLLMErrorMessage(BaseModel):
156
- cause: str
157
- solution: str
158
- provider_message: str | None = None
159
-
160
- def __str__(self) -> str:
161
- lines = [" |----------"]
162
- if self.provider_message is not None:
163
- lines.append(f" | Provider message: {self.provider_message}")
164
- lines.append(f" | Cause: {self.cause}")
165
- lines.extend(
166
- [
167
- f" | Solution: {self.solution}",
168
- " |----------",
169
- ]
170
- )
171
- return "\n".join(lines)
172
-
173
-
174
153
  def _attach_provider_message(
175
154
  formatted_message: FormattedLLMErrorMessage,
176
155
  exception: ProviderError,
@@ -82,8 +82,9 @@ class StructuredResponseRecipe(ResponseRecipe[dict]):
82
82
  pruning (bool): If `True`, then any extra fields in the returned
83
83
  JSON object will be removed. Otherwise, they are retained,
84
84
  which could raise validation errors. Default=True
85
- no_extra_properties (bool): If `True`, then validation will fail
86
- if extra properties are encountered in the returned JSON response.
85
+ no_extra_properties (bool): If `True`, forbid undeclared record fields,
86
+ pruning them when `pruning=True`. Explicit `additionalProperties`
87
+ settings, including dictionary value schemas, are preserved.
87
88
  Default=True.
88
89
  """
89
90
  super().__init__(**kwargs)
@@ -7,6 +7,8 @@ from dataclasses import dataclass, field
7
7
  from enum import Enum
8
8
  from typing import TYPE_CHECKING, Any, Literal
9
9
 
10
+ from pydantic import BaseModel
11
+
10
12
  if TYPE_CHECKING:
11
13
  from data_designer.engine.models.clients.types import ChatCompletionResponse
12
14
 
@@ -60,6 +62,27 @@ def merge_conversation_truncation_reason(
60
62
  return current or accumulated
61
63
 
62
64
 
65
+ class FormattedLLMErrorMessage(BaseModel):
66
+ """User-facing LLM error text: the cause, a suggested solution, and the provider message if any."""
67
+
68
+ cause: str
69
+ solution: str
70
+ provider_message: str | None = None
71
+
72
+ def __str__(self) -> str:
73
+ lines = [" |----------"]
74
+ if self.provider_message is not None:
75
+ lines.append(f" | Provider message: {self.provider_message}")
76
+ lines.append(f" | Cause: {self.cause}")
77
+ lines.extend(
78
+ [
79
+ f" | Solution: {self.solution}",
80
+ " |----------",
81
+ ]
82
+ )
83
+ return "\n".join(lines)
84
+
85
+
63
86
  @dataclass
64
87
  class ChatMessage:
65
88
  """A chat message in an LLM conversation.
@@ -32,14 +32,15 @@ def _is_bare_dictionary_schema(schema_part: Any) -> bool:
32
32
 
33
33
 
34
34
  def forbid_additional_properties(schema: JSONSchemaT) -> JSONSchemaT:
35
- """Transform the provided schema into one which forbids additional properties.
35
+ """Forbid undeclared record fields while preserving explicit dictionary schemas.
36
36
 
37
37
  Args:
38
38
  schema (JSONSchemaT): A JSONSchema to transform.
39
39
 
40
40
  Returns:
41
41
  JSONSchemaT: A new JSONSchema matching the provided one, but
42
- with `additionalProperties: False` set everywhere.
42
+ with `additionalProperties: False` added to records that do not
43
+ declare it. Explicit settings and bare dictionaries are preserved.
43
44
  """
44
45
  new_schema = deepcopy(schema)
45
46
 
@@ -50,7 +51,7 @@ def forbid_additional_properties(schema: JSONSchemaT) -> JSONSchemaT:
50
51
  ## dictionary. In those cases, the implication is that _all_ dictionaries
51
52
  ## are valid, so we should not forbid extra properties in that case.
52
53
  allow_additional_properties = _is_bare_dictionary_schema(schema_part)
53
- schema_part["additionalProperties"] = allow_additional_properties
54
+ schema_part.setdefault("additionalProperties", allow_additional_properties)
54
55
 
55
56
  # Traverse into nested schemas.
56
57
  for key, value in schema_part.items():
@@ -68,7 +69,7 @@ def forbid_additional_properties(schema: JSONSchemaT) -> JSONSchemaT:
68
69
  if isinstance(value, list):
69
70
  for item in value:
70
71
  _enforce(item)
71
- elif key in ("not", "if", "then", "else"):
72
+ elif key in ("not", "if", "then", "else", "additionalProperties"):
72
73
  if isinstance(value, dict):
73
74
  _enforce(value)
74
75
  elif key == "$defs":
@@ -6,9 +6,10 @@ from __future__ import annotations
6
6
  import functools
7
7
  import logging
8
8
  import re
9
+ from collections.abc import Iterator
9
10
  from copy import deepcopy
10
11
  from decimal import ROUND_HALF_UP, Decimal
11
- from typing import Any, overload
12
+ from typing import Any, Literal, overload
12
13
 
13
14
  import data_designer.lazy_heavy_imports as lazy
14
15
  from data_designer.engine.processing.gsonschema.exceptions import JSONSchemaValidationError
@@ -25,32 +26,37 @@ logger = logging.getLogger(__name__)
25
26
 
26
27
 
27
28
  def prune_additional_properties(
28
- _, allow_additional_properties: bool, instance: DataObjectT, schema: JSONSchemaT
29
- ) -> None:
30
- """A JSONSchemaValidtor extension function to prune additional properties.
29
+ validator: Any, allow_additional_properties: bool | JSONSchemaT, instance: DataObjectT, schema: JSONSchemaT
30
+ ) -> Iterator[Any]:
31
+ """Prune forbidden properties and validate explicitly allowed dictionary values.
31
32
 
32
33
  Operates on an individual schema in-place.
33
34
 
34
35
  Args:
35
- allow_additional_properties (bool): The value of the `additionalProperties`
36
+ validator: The active JSON Schema validator.
37
+ allow_additional_properties: The value of the `additionalProperties`
36
38
  field for this schema.
37
39
  instance (DataObjectT): The data object being validated.
38
40
  schema (JSONSchemaT): The schema for this object.
39
41
 
40
- Returns:
41
- Nothing (in place)
42
+ Yields:
43
+ Validation errors for schema-valued additional properties.
42
44
  """
43
- # Only act if the instance is a dict.
44
- if not isinstance(instance, dict) or allow_additional_properties:
45
+ if allow_additional_properties is not False:
46
+ yield from lazy.jsonschema.Draft202012Validator.VALIDATORS["additionalProperties"](
47
+ validator, allow_additional_properties, instance, schema
48
+ )
49
+ return
50
+ if not isinstance(instance, dict):
45
51
  return
46
52
 
47
- # Allowed keys are those defined in the schema's "properties".
53
+ # Properties matched by a pattern are also declared fields.
48
54
  allowed = schema.get("properties", {}).keys()
49
55
 
50
56
  # Iterate over a copy of keys so we can modify the dict in place.
51
57
  n_removed = 0
52
58
  for key in list(instance.keys()):
53
- if key not in allowed:
59
+ if key not in allowed and not any(re.search(pattern, key) for pattern in schema.get("patternProperties", {})):
54
60
  instance.pop(key)
55
61
  n_removed += 1
56
62
  logger.info(f"Unspecified property removed from data object: {key}.")
@@ -59,25 +65,82 @@ def prune_additional_properties(
59
65
  logger.info(f"{n_removed} unspecified properties removed from data object.")
60
66
 
61
67
 
68
+ def _validate_alternatives_with_pruning(
69
+ validator: Any,
70
+ alternatives: list[JSONSchemaT],
71
+ instance: DataObjectT,
72
+ keyword: Literal["anyOf", "oneOf"],
73
+ ) -> Iterator[Any]:
74
+ """Prefer unchanged matches, falling back to isolated pruning candidates."""
75
+ errors = []
76
+ unpruned_matches: list[DataObjectT] = []
77
+ pruned_matches: list[DataObjectT] = []
78
+ for index, subschema in enumerate(alternatives):
79
+ candidate = deepcopy(instance)
80
+ candidate_errors = list(validator.descend(candidate, subschema, schema_path=index))
81
+ if candidate_errors:
82
+ errors.extend(candidate_errors)
83
+ elif candidate == instance:
84
+ unpruned_matches.append(candidate)
85
+ if keyword == "anyOf":
86
+ return
87
+ else:
88
+ pruned_matches.append(candidate)
89
+
90
+ matches = unpruned_matches or pruned_matches
91
+ if not matches:
92
+ yield lazy.jsonschema.ValidationError(
93
+ f"{instance!r} is not valid under any of the given schemas", context=errors
94
+ )
95
+ return
96
+ if keyword == "oneOf" and len(matches) > 1:
97
+ yield lazy.jsonschema.ValidationError(f"{instance!r} is valid under more than one of the given schemas")
98
+ return
99
+
100
+ if keyword == "oneOf":
101
+ # An explicit dialect selects the stock validator while evolve retains reference scope.
102
+ strict_validator = validator.evolve(
103
+ schema={"$schema": _get_default_validator().META_SCHEMA["$id"], "oneOf": alternatives}
104
+ )
105
+ final_errors = list(strict_validator.iter_errors(matches[0]))
106
+ if final_errors:
107
+ yield from final_errors
108
+ return
109
+
110
+ if isinstance(instance, dict):
111
+ instance.clear()
112
+ instance.update(matches[0])
113
+ elif isinstance(instance, list):
114
+ instance[:] = matches[0]
115
+
116
+
117
+ def _validate_any_of_with_pruning(
118
+ validator: Any, any_of: list[JSONSchemaT], instance: DataObjectT, schema: JSONSchemaT
119
+ ) -> Iterator[Any]:
120
+ yield from _validate_alternatives_with_pruning(validator, any_of, instance, "anyOf")
121
+
122
+
62
123
  def _validate_one_of_with_discriminator(
63
124
  validator: Any, one_of: list[JSONSchemaT], instance: DataObjectT, schema: JSONSchemaT
64
- ) -> Any:
125
+ ) -> Iterator[Any]:
65
126
  """Validate a oneOf using the discriminator to select the correct variant.
66
127
 
67
128
  Standard oneOf tries all variants, which combined with in-place pruning
68
129
  can corrupt the instance (pruning from a failed variant removes properties
69
130
  needed by the correct variant). When a discriminator is present, this
70
- validator selects the matching variant directly.
131
+ validator selects the matching variant directly. Without a discriminator,
132
+ each variant is validated on an independent copy. Matches that need no
133
+ pruning take precedence over matches that remove fields.
71
134
  """
72
135
  discriminator = schema.get("discriminator")
73
136
  if not discriminator or not isinstance(discriminator, dict) or not isinstance(instance, dict):
74
- yield from lazy.jsonschema.Draft202012Validator.VALIDATORS["oneOf"](validator, one_of, instance, schema)
137
+ yield from _validate_alternatives_with_pruning(validator, one_of, instance, "oneOf")
75
138
  return
76
139
 
77
140
  prop_name = discriminator.get("propertyName")
78
141
  mapping = discriminator.get("mapping", {})
79
142
  if not prop_name or prop_name not in instance or not mapping:
80
- yield from lazy.jsonschema.Draft202012Validator.VALIDATORS["oneOf"](validator, one_of, instance, schema)
143
+ yield from _validate_alternatives_with_pruning(validator, one_of, instance, "oneOf")
81
144
  return
82
145
 
83
146
  matched_ref = mapping.get(str(instance[prop_name]))
@@ -100,9 +163,10 @@ def extend_jsonschema_validator_with_pruning(validator):
100
163
  extra, unspecified fiends when `additionalProperties: False` is
101
164
  set in the validating schema.
102
165
 
103
- When a oneOf has a discriminator, the discriminator is used to select
104
- the correct variant directly, preventing in-place pruning from
105
- corrupting the instance during failed variant checks.
166
+ Alternatives are checked on independent copies so failed candidates cannot
167
+ prune fields from later candidates. Unchanged matches take precedence over
168
+ pruned matches. Selected oneOf results must match exactly one alternative
169
+ without further pruning. Discriminated oneOf schemas select the correct variant directly.
106
170
 
107
171
  Args:
108
172
  validator (Type[jsonschema.Validator): A validator class
@@ -116,6 +180,7 @@ def extend_jsonschema_validator_with_pruning(validator):
116
180
  validator,
117
181
  {
118
182
  "additionalProperties": prune_additional_properties,
183
+ "anyOf": _validate_any_of_with_pruning,
119
184
  "oneOf": _validate_one_of_with_discriminator,
120
185
  },
121
186
  )
@@ -220,9 +285,9 @@ def validate(
220
285
  Default: `False`.
221
286
  no_extra_properties (bool): If set to `True`, then
222
287
  `additionalProperties: False` is set on all the schema
223
- and all of its sub-schemas. This operation overrides any
224
- existing settings of `additionalProperties` within the
225
- schema. Default: `False`.
288
+ and its record sub-schemas where no explicit setting exists.
289
+ Declared dictionary schemas and explicit `additionalProperties`
290
+ settings are preserved. Default: `False`.
226
291
 
227
292
  Raises:
228
293
  JSONSchemaValidationError: This exception raised in the
@@ -23,7 +23,13 @@ class ManagedDatasetGenerator:
23
23
  ) -> pd.DataFrame:
24
24
  parameters = []
25
25
  uri = self._person_reader.get_dataset_uri(self._locale)
26
- query = f"select * from '{uri}'"
26
+ source = f"'{uri}'"
27
+ if self._locale == "de_DE":
28
+ source = (
29
+ "(select * replace (case sex when 'Weiblich' then 'Female' "
30
+ f"when 'Männlich' then 'Male' else sex end as sex) from {source})"
31
+ )
32
+ query = f"select * from {source}"
27
33
  if evidence:
28
34
  where_conditions = []
29
35
  for column, values in evidence.items():
@@ -15,7 +15,7 @@ from __future__ import annotations
15
15
  REQUIRED_FIELDS = {"first_name", "last_name", "age", "locale"}
16
16
 
17
17
  PII_FIELDS = [
18
- # Universal demographic fields (present in every managed locale)
18
+ # Shared demographic fields (availability varies by locale)
19
19
  "uuid",
20
20
  "first_name",
21
21
  "middle_name",
@@ -43,8 +43,9 @@ PII_FIELDS = [
43
43
  "national_id",
44
44
  # en_US + en_SG
45
45
  "ethnic_background",
46
- # en_SG-specific
46
+ # Shared by en_SG, en_GB, and de_DE
47
47
  "industry",
48
+ # en_SG-specific
48
49
  "preferred_english_name",
49
50
  # fr_FR-specific
50
51
  "first_name_heritage",
@@ -67,6 +68,19 @@ PII_FIELDS = [
67
68
  "military_status",
68
69
  "smoking_status",
69
70
  "waist_status",
71
+ # en_GB-specific
72
+ "ethnicity",
73
+ "country_of_birth",
74
+ "disability",
75
+ # de_DE-specific
76
+ "migration_background",
77
+ "employment_status",
78
+ "job_position",
79
+ "occupation_kldb",
80
+ "last_occupation",
81
+ "last_occupation_kldb",
82
+ "kreis_code",
83
+ "nationality",
70
84
  # pt_BR-specific
71
85
  "race",
72
86
  # India locales (en_IN, hi_Deva_IN, hi_Latn_IN)
@@ -75,7 +89,7 @@ PII_FIELDS = [
75
89
  "second_language",
76
90
  "third_language",
77
91
  "zone",
78
- # Shared across India locales, en_SG, and pt_BR
92
+ # Shared across India locales, en_SG, pt_BR, en_GB, and de_DE
79
93
  "religion",
80
94
  ]
81
95
 
@@ -71,11 +71,6 @@ class DatasetGenerator:
71
71
  "people_gen_resource": create_people_gen_resource(self.schema, person_generator_loader),
72
72
  }
73
73
 
74
- def _round_if_needed(self, column: ConditionalDataColumn, df: pd.DataFrame) -> pd.DataFrame:
75
- if hasattr(column.params, "decimal_places") and column.params.decimal_places is not None:
76
- df[column.name] = df[column.name].round(column.params.decimal_places)
77
- return df
78
-
79
74
  def _run_rejection_sampling(self, df: pd.DataFrame, column: ConditionalDataColumn) -> pd.DataFrame:
80
75
  name = column.name
81
76
  num_iterations = 0
@@ -88,8 +83,17 @@ class DatasetGenerator:
88
83
  condition,
89
84
  jinja_rendering_engine=self._jinja_rendering_engine,
90
85
  ).select_index(df[needs_samples])
86
+ if index.empty:
87
+ continue
91
88
  src = column.get_sampler(condition, **self._shared_sampler_kwargs)
92
89
  df = src.inject_data_column(df, name, index)
90
+ decimal_places = getattr(src.params, "decimal_places", None)
91
+ if decimal_places is not None:
92
+ samples = df.loc[index, name]
93
+ # Preserve integer conversion before precision rounding, but round before converting to strings.
94
+ if column.convert_to == "int":
95
+ samples = src.preproc(samples, column.convert_to)
96
+ df.loc[index, name] = samples.round(decimal_places)
93
97
 
94
98
  df[name] = column.get_default_sampler(**self._shared_sampler_kwargs).preproc(df[name], column.convert_to)
95
99
 
@@ -121,6 +125,5 @@ class DatasetGenerator:
121
125
  dataset[column.name] = column.get_default_sampler(**self._shared_sampler_kwargs).postproc(
122
126
  dataset[column.name], column.convert_to
123
127
  )
124
- dataset = self._round_if_needed(column, dataset)
125
128
 
126
129
  return dataset[self.schema.column_names]
@@ -11,6 +11,7 @@ from datetime import datetime
11
11
  from functools import cached_property
12
12
  from pathlib import Path
13
13
  from typing import TYPE_CHECKING
14
+ from uuid import uuid4
14
15
 
15
16
  from pydantic import BaseModel, ConfigDict, PrivateAttr, field_validator, model_validator
16
17
 
@@ -165,6 +166,31 @@ class ArtifactStorage(BaseModel):
165
166
  self._media_storage.base_path = self.base_dataset_path
166
167
  self._media_storage.images_dir = self.base_dataset_path / images_subdir
167
168
 
169
+ def create_dataset_directory(self, *, resume: ResumeMode) -> None:
170
+ """Exclusively claim a fresh dataset directory, or reuse it when resuming."""
171
+ if resume != ResumeMode.NEVER:
172
+ self.mkdir_if_needed(self.base_dataset_path)
173
+ return
174
+
175
+ dataset_path = self.base_dataset_path
176
+ while True:
177
+ try:
178
+ dataset_path.mkdir(exist_ok=False)
179
+ except FileExistsError:
180
+ dataset_path = self.artifact_path / (
181
+ f"{self.dataset_name}_{datetime.now().strftime('%m-%d-%Y_%H%M%S')}_{uuid4().hex[:8]}"
182
+ )
183
+ except OSError as exc:
184
+ raise ArtifactStorageError(f"Cannot create dataset directory {str(dataset_path)!r}: {exc}") from exc
185
+ else:
186
+ break
187
+
188
+ if dataset_path != self.base_dataset_path:
189
+ logger.info(f"📂 Dataset directory already claimed. This run will be saved to {str(dataset_path)!r}.")
190
+ # Pydantic 2.9 does not support assigning to cached properties.
191
+ self.__dict__["resolved_dataset_name"] = dataset_path.name
192
+ self.refresh_media_storage_path()
193
+
168
194
  @staticmethod
169
195
  def mkdir_if_needed(path: Path | str) -> Path:
170
196
  """Create the directory if it does not exist."""
@@ -42,8 +42,8 @@ TYPE_FROM_SYMBOL = {
42
42
  "PLE": "error",
43
43
  "PLR": "refactor",
44
44
  "PLW": "warning",
45
- "SyntaxError": "fatal",
46
45
  }
46
+ SYNTAX_ERROR_CODES = {"invalid-syntax", "E999", "SyntaxError"}
47
47
 
48
48
  PYTHON_MESSAGES_FIELD = "python_linter_messages"
49
49
  RECORD_ID_COLUMN_NAME = "internal_code_record_id"
@@ -215,18 +215,20 @@ class PythonValidator(BaseValidator):
215
215
 
216
216
  for diagnostic in diagnostics:
217
217
  filename = diagnostic["filename"]
218
- code = diagnostic["code"]
218
+ code = diagnostic.get("code")
219
219
  location = diagnostic["location"]
220
220
  message = diagnostic["message"]
221
221
 
222
- # Extract alphabetic prefix from code for type mapping
223
- alpha_prefix = "".join(c for c in code if c.isalpha())
224
- error_type = TYPE_FROM_SYMBOL.get(alpha_prefix, "warning")
222
+ if code is None or code in SYNTAX_ERROR_CODES:
223
+ error_type = "fatal"
224
+ else:
225
+ alpha_prefix = "".join(c for c in code if c.isalpha())
226
+ error_type = TYPE_FROM_SYMBOL.get(alpha_prefix, "warning")
225
227
 
226
228
  processed[Path(filename).stem].add(
227
229
  PythonLinterMessage(
228
230
  type=error_type,
229
- symbol=code,
231
+ symbol=str(code),
230
232
  line=location["row"],
231
233
  column=location["column"],
232
234
  message=message,
@@ -1,9 +1,12 @@
1
1
  # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
+ from __future__ import annotations
5
+
4
6
  from unittest.mock import Mock, patch
5
7
 
6
8
  import pytest
9
+ from pydantic import BaseModel, JsonValue
7
10
 
8
11
  from data_designer.config.column_configs import (
9
12
  LLMCodeColumnConfig,
@@ -34,6 +37,24 @@ def test_prompt_renderer_prompt_type():
34
37
  assert issubclass(PromptType, str)
35
38
 
36
39
 
40
+ class DictionaryOutput(BaseModel):
41
+ fields: dict[str, int]
42
+ metadata: dict[str, JsonValue]
43
+
44
+
45
+ @pytest.mark.parametrize("use_pydantic", [False, True], ids=["json-schema", "pydantic"])
46
+ def test_create_response_recipe_preserves_structured_dictionary_schema(use_pydantic: bool) -> None:
47
+ config = LLMStructuredColumnConfig(
48
+ name="test_column",
49
+ prompt="Test prompt",
50
+ model_alias="test_model",
51
+ output_format=DictionaryOutput if use_pydantic else DictionaryOutput.model_json_schema(),
52
+ )
53
+ example = DictionaryOutput(fields={"alpha": 1}, metadata={"nested": {"values": [1, "two", None]}})
54
+ recipe = create_response_recipe(config)
55
+ assert recipe.parse(example.model_dump_json()) == example.model_dump()
56
+
57
+
37
58
  @pytest.mark.parametrize(
38
59
  "config_class,expected_recipe_class",
39
60
  [
@@ -130,8 +130,18 @@ def test_unknown_provider_type_raises_data_designer_error(
130
130
  inference_parameters=ChatCompletionInferenceParams(),
131
131
  provider="custom-provider",
132
132
  )
133
- with pytest.raises(DataDesignerError, match="Provider type 'custom'.*is not supported"):
133
+ with pytest.raises(DataDesignerError) as exc_info:
134
134
  create_model_client(config, secret_resolver, registry)
135
+ assert type(exc_info.value) is DataDesignerError
136
+ assert str(exc_info.value) == "\n".join(
137
+ [
138
+ " |----------",
139
+ " | Cause: Provider type 'custom' for provider 'custom-provider' is not supported.",
140
+ " | Solution: Change provider_type to one of 'openai', 'anthropic' in your model provider config. "
141
+ 'Most OpenAI-compatible endpoints (vLLM, TGI, NIM, etc.) work with provider_type="openai".',
142
+ " |----------",
143
+ ]
144
+ )
135
145
 
136
146
 
137
147
  def test_openai_provider_type_case_insensitive(