data-designer-engine 0.9.2__tar.gz → 0.9.4__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.
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/PKG-INFO +6 -5
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/pyproject.toml +4 -3
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/generators/validation.py +1 -1
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/compiler.py +26 -2
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/dataset_builder.py +1 -1
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/adapters/http_model_client.py +17 -8
- data_designer_engine-0.9.4/src/data_designer/engine/models/clients/adapters/httpx_sharding.py +82 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/errors.py +3 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/retry.py +5 -4
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/errors.py +11 -1
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/parsers/postprocessors.py +15 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/recipes/response_recipes.py +3 -3
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/request_admission/queue.py +6 -4
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/ginja/ast.py +1 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/ginja/environment.py +5 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/validation.py +28 -7
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/test_validation.py +11 -1
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/test_async_scheduler.py +0 -1
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/test_client_errors.py +3 -1
- data_designer_engine-0.9.4/tests/engine/models/clients/test_httpx_sharding.py +335 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/test_native_http_clients.py +85 -6
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/parsers/test_postprocessors.py +24 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/recipes/test_response_recipes.py +62 -2
- data_designer_engine-0.9.4/tests/engine/models/request_admission/test_request_queue.py +135 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/test_model_errors.py +31 -2
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/test_generator.py +2 -2
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/test_compiler.py +41 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/test_validation.py +135 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/.gitignore +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/README.md +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/analysis/column_profilers/base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/analysis/column_profilers/judge_score_profiler.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/analysis/column_profilers/registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/analysis/column_statistics.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/analysis/dataset_profiler.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/analysis/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/analysis/utils/column_statistics_calculations.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/analysis/utils/judge_score_processing.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/capacity.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/generators/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/generators/base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/generators/custom.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/generators/embedding.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/generators/expression.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/generators/image.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/generators/llm_completion.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/generators/samplers.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/generators/seed_dataset.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/utils/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/utils/generator_classification.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/utils/judge_score_factory.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/column_generators/utils/prompt_renderer.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/configurable_task.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/context.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/async_scheduler.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/multi_column_configs.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/row_group_plan.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/scheduling/completion.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/scheduling/queue.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/scheduling/resolver.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/scheduling/resources.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/scheduling/task_admission.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/scheduling/task_model.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/scheduling/task_policies.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/utils/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/utils/async_concurrency.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/utils/concurrency.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/utils/config_compiler.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/utils/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/utils/execution_graph.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/utils/processor_runner.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/utils/row_group_buffer.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/utils/skip_evaluator.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/dataset_builders/utils/skip_tracker.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/mcp/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/mcp/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/mcp/facade.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/mcp/factory.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/mcp/io.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/mcp/registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/model_provider.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/adapters/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/adapters/anthropic.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/adapters/anthropic_translation.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/adapters/http_helpers.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/adapters/openai_compatible.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/factory.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/model_request_executor.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/parsing.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/clients/types.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/facade.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/factory.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/parsers/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/parsers/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/parsers/parser.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/parsers/tag_parsers.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/parsers/types.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/recipes/base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/request_admission/config.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/request_admission/controller.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/request_admission/limits.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/request_admission/outcomes.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/request_admission/pressure.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/request_admission/resolver.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/request_admission/resources.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/resources.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/telemetry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/usage.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/usage_events.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/observability.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/ginja/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/ginja/exceptions.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/ginja/record.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/gsonschema/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/gsonschema/exceptions.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/gsonschema/schema_transformers.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/gsonschema/types.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/gsonschema/validators.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/processors/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/processors/base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/processors/drop_columns.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/processors/registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/processors/schema_transform.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/processing/utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/progress/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/progress/reporter.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/progress/terminal/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/progress/terminal/throughput_panel.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/progress/tracker.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/readiness.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/registry/base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/registry/data_designer_registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/registry/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/agent_rollout/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/agent_rollout/atif.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/agent_rollout/base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/agent_rollout/claude_code.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/agent_rollout/codex.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/agent_rollout/hermes_agent.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/agent_rollout/pi_coding_agent.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/agent_rollout/registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/agent_rollout/types.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/agent_rollout/utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/managed_dataset_generator.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/person_reader.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/resource_provider.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/resources/seed_reader.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/column.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/constraints.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/data_sources/base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/data_sources/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/data_sources/sources.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/entities/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/entities/assets/zip_area_code_map.parquet +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/entities/dataset_based_person_fields.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/entities/email_address_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/entities/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/entities/national_id_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/entities/person.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/entities/phone_number.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/generator.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/jinja_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/people_gen.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/person_constants.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/schema.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/schema_builder.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/sampling_gen/utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/secret_resolver.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/storage/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/storage/artifact_storage.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/storage/media_storage.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/testing/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/testing/fixtures.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/testing/observability.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/testing/seed_readers.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/testing/stubs.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/testing/utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/utils/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/utils/token_counting.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/validators/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/validators/base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/validators/local_callable.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/validators/python.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/validators/remote.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/validators/sql.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/conftest.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/column_profilers/test_base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/column_profilers/test_judge_score_profiler.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/conftest.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/test_column_statistics_calculator.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/test_data/artifacts/dataset/column_configs.json +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/test_data/artifacts/dataset/dataset.json +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/test_data/artifacts/dataset/metadata.json +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/test_dataset_profiler.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/test_errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/utils/test_column_statistics_calculations.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/analysis/utils/test_judge_score_processing.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/test_async_generators.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/test_column_generator_base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/test_custom.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/test_embedding.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/test_expression.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/test_image.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/test_llm_completion_generators.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/test_samplers.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/generators/test_seed_dataset.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/test_registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/utils/test_column_generator_errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/utils/test_generator_classification.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/utils/test_judge_score_factory.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/column_generators/utils/test_prompt_renderer.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/conftest.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/scheduling/test_completion.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/scheduling/test_queue.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/scheduling/test_resolver.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/scheduling/test_resources.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/scheduling/test_task_admission.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/scheduling/test_task_model.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/scheduling/test_task_policies.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/test_async_builder_integration.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/test_dataset_builder.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/test_multi_column_configs.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/utils/test_concurrency.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/utils/test_config_compiler.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/utils/test_execution_graph.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/utils/test_row_group_buffer.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/utils/test_skip_evaluator.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/utils/test_skip_tracker.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/dataset_builders/utils/test_topological_sort.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/mcp/conftest.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/mcp/test_mcp_facade.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/mcp/test_mcp_factory.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/mcp/test_mcp_io.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/mcp/test_mcp_registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/conftest.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/test_anthropic.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/test_anthropic_translation.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/test_factory.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/test_model_request_executor.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/test_openai_compatible.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/test_parsing.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/test_retry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/clients/test_types.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/conftest.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/parsers/test_parser.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/parsers/test_parsers_types.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/parsers/test_tag_parsers.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/recipes/test_recipe_base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/request_admission/test_controller.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/stub_secrets.json +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/test_facade.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/test_model_registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/test_model_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/test_telemetry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/models/test_usage.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/ginja/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/ginja/test_ast.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/ginja/test_environment.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/ginja/test_exceptions.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/ginja/test_record.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/gsonschema/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/gsonschema/test_exceptions.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/gsonschema/test_schema_transformers.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/gsonschema/test_types.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/gsonschema/test_validators.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/processors/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/processors/test_drop_columns.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/processors/test_registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/processors/test_schema_transform.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/processing/test_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/progress/terminal/test_throughput_panel.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/progress/test_tracker.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/registry/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/registry/conftest.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/registry/test_base.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/registry/test_data_designer_registry.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/registry/test_errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/agent_rollout/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/agent_rollout/test_atif.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/agent_rollout/test_claude_code.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/agent_rollout/test_codex.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/agent_rollout/test_hermes_agent.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/agent_rollout/test_pi_coding_agent.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/agent_rollout/test_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/conftest.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/test_managed_dataset_generator.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/test_person_reader.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/test_resource_provider.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/resources/test_seed_reader.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/conftest.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/data_sources/test_sampler_errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/data_sources/test_sources.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/entities/test_email_address_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/entities/test_national_id_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/entities/test_person.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/entities/test_phone_number.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/test_column.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/test_constraints.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/test_jinja_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/test_people_gen.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/test_schema.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/sampling_gen/test_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/storage/__init__.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/storage/test_artifact_storage.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/storage/test_media_storage.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/test_capacity.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/test_configurable_task.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/test_dataset_metadata.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/test_engine_errors.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/test_model_provider.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/test_observability.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/test_readiness.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/test_secret_resolver.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/testing/test_plugin_testing_utils.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/utils/test_token_counting.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/validators/test_local_callable.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/validators/test_python.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/validators/test_remote.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/tests/engine/validators/test_sql.py +0 -0
- {data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/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.
|
|
3
|
+
Version: 0.9.4
|
|
4
4
|
Summary: Generation engine for DataDesigner synthetic data generation
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Classifier: Development Status :: 4 - Beta
|
|
@@ -15,10 +15,11 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
15
15
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
16
16
|
Requires-Python: >=3.10
|
|
17
17
|
Requires-Dist: anyascii<1,>=0.3.3
|
|
18
|
+
Requires-Dist: anyio<5,>=4.14.2
|
|
18
19
|
Requires-Dist: asciichartpy<2,>=1.5.25
|
|
19
20
|
Requires-Dist: chardet<6,>=3.0.2
|
|
20
|
-
Requires-Dist: cryptography
|
|
21
|
-
Requires-Dist: data-designer-config==0.9.
|
|
21
|
+
Requires-Dist: cryptography<51,>=50.0.0
|
|
22
|
+
Requires-Dist: data-designer-config==0.9.4
|
|
22
23
|
Requires-Dist: duckdb<2,>=1.5.0
|
|
23
24
|
Requires-Dist: faker<21,>=20.1.0
|
|
24
25
|
Requires-Dist: fsspec<2026,>=2025.3.0
|
|
@@ -34,10 +35,10 @@ Requires-Dist: marko<3,>=2.1.2
|
|
|
34
35
|
Requires-Dist: mcp<2,>=1.29.0
|
|
35
36
|
Requires-Dist: networkx<4,>=3.0
|
|
36
37
|
Requires-Dist: numpy<3,>=1.23.5
|
|
37
|
-
Requires-Dist: pandas<
|
|
38
|
+
Requires-Dist: pandas<4,>=2.3.3
|
|
38
39
|
Requires-Dist: pyarrow<25,>=24
|
|
39
40
|
Requires-Dist: pydantic<3,>=2.9.2
|
|
40
|
-
Requires-Dist: pyjwt[crypto]<3,>=2.
|
|
41
|
+
Requires-Dist: pyjwt[crypto]<3,>=2.15.0
|
|
41
42
|
Requires-Dist: python-multipart<1,>=0.0.32
|
|
42
43
|
Requires-Dist: rich<15,>=13.7.1
|
|
43
44
|
Requires-Dist: ruff<1,>=0.14.10
|
|
@@ -34,9 +34,10 @@ bump = true
|
|
|
34
34
|
[tool.hatch.metadata.hooks.uv-dynamic-versioning]
|
|
35
35
|
dependencies = [
|
|
36
36
|
"anyascii>=0.3.3,<1",
|
|
37
|
+
"anyio>=4.14.2,<5", # 4.14.2 fixes AnyIO security advisories pulled in by HTTP clients
|
|
37
38
|
"asciichartpy>=1.5.25,<2",
|
|
38
39
|
"chardet>=3.0.2,<6", # Pulled in by sqlfluff
|
|
39
|
-
"cryptography>=
|
|
40
|
+
"cryptography>=50.0.0,<51", # 50.0.0 fixes certificate and PKCS#7 security advisories
|
|
40
41
|
"data-designer-config=={{ version }}",
|
|
41
42
|
"duckdb>=1.5.0,<2",
|
|
42
43
|
"faker>=20.1.0,<21",
|
|
@@ -53,10 +54,10 @@ dependencies = [
|
|
|
53
54
|
"mcp>=1.29.0,<2", # 1.29.0 fixes MCP security advisories
|
|
54
55
|
"networkx>=3.0,<4",
|
|
55
56
|
"numpy>=1.23.5,<3",
|
|
56
|
-
"pandas>=2.3.3,<
|
|
57
|
+
"pandas>=2.3.3,<4",
|
|
57
58
|
"pyarrow>=24,<25", # 24.0.0 fixes PyArrow security advisories
|
|
58
59
|
"pydantic>=2.9.2,<3",
|
|
59
|
-
"pyjwt[crypto]>=2.
|
|
60
|
+
"pyjwt[crypto]>=2.15.0,<3", # 2.15.0 fixes PyJWT security advisories pulled in by mcp
|
|
60
61
|
"python-multipart>=0.0.32,<1", # 0.0.32 addresses multipart security advisories pulled in by mcp
|
|
61
62
|
"rich>=13.7.1,<15",
|
|
62
63
|
"ruff>=0.14.10,<1",
|
|
@@ -119,7 +119,7 @@ class ValidationColumnGenerator(ColumnGeneratorFullColumn[ValidationColumnConfig
|
|
|
119
119
|
column_name=self.config.name,
|
|
120
120
|
result_callback=result_callback,
|
|
121
121
|
error_callback=error_callback,
|
|
122
|
-
shutdown_error_rate=settings.
|
|
122
|
+
shutdown_error_rate=settings.effective_shutdown_error_rate,
|
|
123
123
|
shutdown_error_window=settings.shutdown_error_window,
|
|
124
124
|
disable_early_shutdown=settings.disable_early_shutdown,
|
|
125
125
|
) as executor:
|
{data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/compiler.py
RENAMED
|
@@ -11,7 +11,12 @@ from data_designer.config.errors import InvalidConfigError
|
|
|
11
11
|
from data_designer.config.sampler_params import UUIDSamplerParams
|
|
12
12
|
from data_designer.engine.resources.resource_provider import ResourceProvider
|
|
13
13
|
from data_designer.engine.resources.seed_reader import SeedReader, SeedReaderConfigError
|
|
14
|
-
from data_designer.engine.validation import
|
|
14
|
+
from data_designer.engine.validation import (
|
|
15
|
+
ViolationLevel,
|
|
16
|
+
resolve_processor_dropped_columns,
|
|
17
|
+
rich_print_violations,
|
|
18
|
+
validate_data_designer_config,
|
|
19
|
+
)
|
|
15
20
|
|
|
16
21
|
logger = logging.getLogger(__name__)
|
|
17
22
|
|
|
@@ -43,7 +48,26 @@ def _resolve_and_add_seed_columns(config: DataDesignerConfig, seed_reader: SeedR
|
|
|
43
48
|
"Please remove the conflicting columns or use a seed dataset with different column names."
|
|
44
49
|
)
|
|
45
50
|
|
|
46
|
-
|
|
51
|
+
seed_columns = [SeedDatasetColumnConfig(name=col_name) for col_name in seed_col_names]
|
|
52
|
+
config.columns.extend(seed_columns)
|
|
53
|
+
_mark_processor_dropped_seed_columns(config, seed_columns)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _mark_processor_dropped_seed_columns(
|
|
57
|
+
config: DataDesignerConfig, seed_columns: list[SeedDatasetColumnConfig]
|
|
58
|
+
) -> None:
|
|
59
|
+
"""Marks seed columns targeted by a drop processor with `drop=True`.
|
|
60
|
+
|
|
61
|
+
`DataDesignerConfigBuilder.add_processor` does this for configured columns, but seed
|
|
62
|
+
columns don't exist yet at that point — they're resolved here. Without this, a
|
|
63
|
+
processor-dropped seed column is still handed to the dataset profiler, which either
|
|
64
|
+
reports a column the emitted dataset no longer has or fails outright when
|
|
65
|
+
`preserve_dropped_columns=False`.
|
|
66
|
+
"""
|
|
67
|
+
dropped_column_names = resolve_processor_dropped_columns(config.columns, config.processors or [])
|
|
68
|
+
for column in seed_columns:
|
|
69
|
+
if column.name in dropped_column_names:
|
|
70
|
+
column.drop = True
|
|
47
71
|
|
|
48
72
|
|
|
49
73
|
def _add_internal_row_id_column_if_needed(config: DataDesignerConfig) -> None:
|
|
@@ -843,7 +843,7 @@ class DatasetBuilder:
|
|
|
843
843
|
num_records,
|
|
844
844
|
buffer_size,
|
|
845
845
|
on_finalize_row_group=finalize_row_group,
|
|
846
|
-
shutdown_error_rate=settings.
|
|
846
|
+
shutdown_error_rate=settings.effective_shutdown_error_rate,
|
|
847
847
|
shutdown_error_window=settings.shutdown_error_window,
|
|
848
848
|
disable_early_shutdown=settings.disable_early_shutdown,
|
|
849
849
|
trace=trace_enabled,
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
+
import asyncio
|
|
7
|
+
import importlib
|
|
6
8
|
import threading
|
|
7
9
|
from abc import ABC, abstractmethod
|
|
8
10
|
from typing import TYPE_CHECKING, Any
|
|
@@ -15,10 +17,11 @@ from data_designer.engine.models.clients.adapters.http_helpers import (
|
|
|
15
17
|
wrap_transport_error,
|
|
16
18
|
)
|
|
17
19
|
from data_designer.engine.models.clients.errors import SyncClientUnavailableError, map_http_error_to_provider_error
|
|
18
|
-
from data_designer.engine.models.clients.retry import RetryConfig,
|
|
20
|
+
from data_designer.engine.models.clients.retry import RetryConfig, create_retry_transport
|
|
19
21
|
|
|
20
22
|
if TYPE_CHECKING:
|
|
21
23
|
import httpx
|
|
24
|
+
from httpx_retries import RetryTransport
|
|
22
25
|
|
|
23
26
|
|
|
24
27
|
class ClientConcurrencyMode(StrEnum):
|
|
@@ -66,6 +69,7 @@ class HttpModelClient(ABC):
|
|
|
66
69
|
self._timeout_s = timeout_s
|
|
67
70
|
self._retry_config = retry_config
|
|
68
71
|
self._mode: ClientConcurrencyMode = concurrency_mode
|
|
72
|
+
self._shard_count = min(16, max(1, max_parallel_requests))
|
|
69
73
|
|
|
70
74
|
pool_max = max(_MIN_MAX_CONNECTIONS, _POOL_MAX_MULTIPLIER * max_parallel_requests)
|
|
71
75
|
pool_keepalive = max(_MIN_KEEPALIVE_CONNECTIONS, max_parallel_requests)
|
|
@@ -78,6 +82,7 @@ class HttpModelClient(ABC):
|
|
|
78
82
|
self._aclient: httpx.AsyncClient | None = async_client
|
|
79
83
|
self._init_lock = threading.Lock()
|
|
80
84
|
self._closed = False
|
|
85
|
+
self._close_future: asyncio.Future[list[None | BaseException]] | None = None
|
|
81
86
|
|
|
82
87
|
@property
|
|
83
88
|
def concurrency_mode(self) -> ClientConcurrencyMode:
|
|
@@ -120,7 +125,8 @@ class HttpModelClient(ABC):
|
|
|
120
125
|
raise RuntimeError("Model client is closed.")
|
|
121
126
|
if self._aclient is None:
|
|
122
127
|
if self._transport is None:
|
|
123
|
-
|
|
128
|
+
sharding = importlib.import_module("data_designer.engine.models.clients.adapters.httpx_sharding")
|
|
129
|
+
inner = sharding.ShardedAsyncHTTPTransport(limits=self._limits, shard_count=self._shard_count)
|
|
124
130
|
self._transport = create_retry_transport(
|
|
125
131
|
self._retry_config, strip_rate_limit_codes=True, transport=inner
|
|
126
132
|
)
|
|
@@ -152,15 +158,18 @@ class HttpModelClient(ABC):
|
|
|
152
158
|
if self._mode != ClientConcurrencyMode.ASYNC:
|
|
153
159
|
return
|
|
154
160
|
with self._init_lock:
|
|
155
|
-
async_client = self._aclient
|
|
156
|
-
transport = self._transport
|
|
157
161
|
self._closed = True
|
|
162
|
+
resource = self._aclient if self._aclient is not None else self._transport
|
|
163
|
+
if self._close_future is None and resource is not None:
|
|
164
|
+
self._close_future = asyncio.gather(resource.aclose(), return_exceptions=True)
|
|
165
|
+
elif self._close_future is None:
|
|
166
|
+
return
|
|
158
167
|
self._aclient = None
|
|
159
168
|
self._transport = None
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
169
|
+
results = await asyncio.shield(self._close_future)
|
|
170
|
+
for result in results:
|
|
171
|
+
if isinstance(result, BaseException):
|
|
172
|
+
raise result
|
|
164
173
|
|
|
165
174
|
# --- HTTP helpers ---
|
|
166
175
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""Public-API HTTPX transport sharding."""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import asyncio
|
|
9
|
+
from collections.abc import Callable
|
|
10
|
+
from typing import TYPE_CHECKING
|
|
11
|
+
|
|
12
|
+
# RetryTransport requires concrete AsyncBaseTransport inheritance.
|
|
13
|
+
# This module is loaded only when constructing an async transport.
|
|
14
|
+
from httpx import AsyncBaseTransport
|
|
15
|
+
|
|
16
|
+
import data_designer.lazy_heavy_imports as lazy
|
|
17
|
+
|
|
18
|
+
if TYPE_CHECKING:
|
|
19
|
+
import httpx
|
|
20
|
+
|
|
21
|
+
_DEFAULT_SHARD_COUNT = 16
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _split_limit(total: int, shard_count: int) -> list[int]:
|
|
25
|
+
base, remainder = divmod(total, shard_count)
|
|
26
|
+
return [base + (index < remainder) for index in range(shard_count)]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ShardedAsyncHTTPTransport(AsyncBaseTransport):
|
|
30
|
+
"""Distribute requests round-robin across ordinary HTTPX transports."""
|
|
31
|
+
|
|
32
|
+
def __init__(
|
|
33
|
+
self,
|
|
34
|
+
*,
|
|
35
|
+
limits: httpx.Limits,
|
|
36
|
+
shard_count: int = _DEFAULT_SHARD_COUNT,
|
|
37
|
+
transport_factory: Callable[[httpx.Limits], httpx.AsyncBaseTransport] | None = None,
|
|
38
|
+
) -> None:
|
|
39
|
+
if shard_count <= 0:
|
|
40
|
+
raise ValueError("shard_count must be positive")
|
|
41
|
+
if limits.max_connections is None or limits.max_keepalive_connections is None:
|
|
42
|
+
raise ValueError("sharded transport requires finite connection limits")
|
|
43
|
+
if limits.max_connections < shard_count or limits.max_keepalive_connections < shard_count:
|
|
44
|
+
raise ValueError("connection limits must provide at least one connection per shard")
|
|
45
|
+
|
|
46
|
+
factory = transport_factory or (lambda shard_limits: lazy.httpx.AsyncHTTPTransport(limits=shard_limits))
|
|
47
|
+
maximums = _split_limit(limits.max_connections, shard_count)
|
|
48
|
+
keepalives = _split_limit(limits.max_keepalive_connections, shard_count)
|
|
49
|
+
self._shard_limits = tuple(
|
|
50
|
+
lazy.httpx.Limits(
|
|
51
|
+
max_connections=maximum,
|
|
52
|
+
max_keepalive_connections=keepalive,
|
|
53
|
+
keepalive_expiry=limits.keepalive_expiry,
|
|
54
|
+
)
|
|
55
|
+
for maximum, keepalive in zip(maximums, keepalives, strict=True)
|
|
56
|
+
)
|
|
57
|
+
self._transports = tuple(factory(shard_limits) for shard_limits in self._shard_limits)
|
|
58
|
+
self._next_transport = 0
|
|
59
|
+
self._closed = False
|
|
60
|
+
self._close_future: asyncio.Future[list[None | BaseException]] | None = None
|
|
61
|
+
|
|
62
|
+
@property
|
|
63
|
+
def shard_limits(self) -> tuple[httpx.Limits, ...]:
|
|
64
|
+
return self._shard_limits
|
|
65
|
+
|
|
66
|
+
async def handle_async_request(self, request: httpx.Request) -> httpx.Response:
|
|
67
|
+
if self._closed:
|
|
68
|
+
raise RuntimeError("Transport is closed.")
|
|
69
|
+
transport = self._transports[self._next_transport]
|
|
70
|
+
self._next_transport = (self._next_transport + 1) % len(self._transports)
|
|
71
|
+
return await transport.handle_async_request(request)
|
|
72
|
+
|
|
73
|
+
async def aclose(self) -> None:
|
|
74
|
+
self._closed = True
|
|
75
|
+
if self._close_future is None:
|
|
76
|
+
self._close_future = asyncio.gather(
|
|
77
|
+
*(transport.aclose() for transport in self._transports), return_exceptions=True
|
|
78
|
+
)
|
|
79
|
+
results = await asyncio.shield(self._close_future)
|
|
80
|
+
for result in results:
|
|
81
|
+
if isinstance(result, BaseException):
|
|
82
|
+
raise result
|
|
@@ -15,6 +15,7 @@ class ProviderErrorKind(str, Enum):
|
|
|
15
15
|
API_ERROR = "api_error"
|
|
16
16
|
API_CONNECTION = "api_connection"
|
|
17
17
|
AUTHENTICATION = "authentication"
|
|
18
|
+
CLIENT_ERROR = "client_error"
|
|
18
19
|
CONTEXT_WINDOW_EXCEEDED = "context_window_exceeded"
|
|
19
20
|
QUOTA_EXCEEDED = "quota_exceeded"
|
|
20
21
|
UNSUPPORTED_PARAMS = "unsupported_params"
|
|
@@ -101,6 +102,8 @@ def map_http_status_to_provider_error_kind(status_code: int, body_text: str = ""
|
|
|
101
102
|
return ProviderErrorKind.BAD_REQUEST
|
|
102
103
|
if 500 <= status_code <= 599:
|
|
103
104
|
return ProviderErrorKind.INTERNAL_SERVER
|
|
105
|
+
if 400 <= status_code <= 499:
|
|
106
|
+
return ProviderErrorKind.CLIENT_ERROR
|
|
104
107
|
return ProviderErrorKind.API_ERROR
|
|
105
108
|
|
|
106
109
|
|
|
@@ -7,10 +7,11 @@ import logging
|
|
|
7
7
|
from dataclasses import dataclass, field
|
|
8
8
|
from typing import TYPE_CHECKING
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
import data_designer.lazy_heavy_imports as lazy
|
|
11
11
|
|
|
12
12
|
if TYPE_CHECKING:
|
|
13
13
|
import httpx
|
|
14
|
+
from httpx_retries import RetryTransport
|
|
14
15
|
|
|
15
16
|
logger = logging.getLogger(__name__)
|
|
16
17
|
|
|
@@ -72,13 +73,13 @@ def create_retry_transport(
|
|
|
72
73
|
sorted(reserved_overlap),
|
|
73
74
|
)
|
|
74
75
|
status_codes = status_codes - _RESERVED_STATUS_CODES
|
|
75
|
-
retry = Retry(
|
|
76
|
+
retry = lazy.httpx_retries.Retry(
|
|
76
77
|
total=cfg.max_retries,
|
|
77
78
|
backoff_factor=cfg.backoff_factor,
|
|
78
79
|
backoff_jitter=cfg.backoff_jitter,
|
|
79
80
|
max_backoff_wait=cfg.max_backoff_wait,
|
|
80
81
|
status_forcelist=status_codes,
|
|
81
82
|
respect_retry_after_header=True,
|
|
82
|
-
allowed_methods=Retry.RETRYABLE_METHODS | frozenset(["POST"]),
|
|
83
|
+
allowed_methods=lazy.httpx_retries.Retry.RETRYABLE_METHODS | frozenset(["POST"]),
|
|
83
84
|
)
|
|
84
|
-
return RetryTransport(transport=transport, retry=retry)
|
|
85
|
+
return lazy.httpx_retries.RetryTransport(transport=transport, retry=retry)
|
{data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/models/errors.py
RENAMED
|
@@ -98,6 +98,9 @@ class ModelUnsupportedParamsError(DataDesignerError): ...
|
|
|
98
98
|
class ModelBadRequestError(DataDesignerError): ...
|
|
99
99
|
|
|
100
100
|
|
|
101
|
+
class ModelRequestRejectedError(DataDesignerError): ...
|
|
102
|
+
|
|
103
|
+
|
|
101
104
|
class ModelInternalServerError(DataDesignerError): ...
|
|
102
105
|
|
|
103
106
|
|
|
@@ -172,7 +175,7 @@ def _attach_provider_message(
|
|
|
172
175
|
formatted_message: FormattedLLMErrorMessage,
|
|
173
176
|
exception: ProviderError,
|
|
174
177
|
) -> FormattedLLMErrorMessage:
|
|
175
|
-
if exception.status_code != 400:
|
|
178
|
+
if exception.status_code != 400 and exception.kind != ProviderErrorKind.CLIENT_ERROR:
|
|
176
179
|
return formatted_message
|
|
177
180
|
normalized = _normalize_error_detail(exception.message)
|
|
178
181
|
if normalized is None:
|
|
@@ -320,6 +323,7 @@ def _raise_from_provider_error(
|
|
|
320
323
|
ProviderErrorKind.NOT_FOUND: ModelNotFoundError,
|
|
321
324
|
ProviderErrorKind.PERMISSION_DENIED: ModelPermissionDeniedError,
|
|
322
325
|
ProviderErrorKind.UNSUPPORTED_PARAMS: ModelUnsupportedParamsError,
|
|
326
|
+
ProviderErrorKind.CLIENT_ERROR: ModelRequestRejectedError,
|
|
323
327
|
ProviderErrorKind.INTERNAL_SERVER: ModelInternalServerError,
|
|
324
328
|
ProviderErrorKind.UNPROCESSABLE_ENTITY: ModelUnprocessableEntityError,
|
|
325
329
|
ProviderErrorKind.API_CONNECTION: ModelAPIConnectionError,
|
|
@@ -350,6 +354,12 @@ def _raise_from_provider_error(
|
|
|
350
354
|
f"One or more of the parameters you provided were found to be unsupported by model {model_name!r} while {purpose}.",
|
|
351
355
|
f"Review the documentation for model provider {model_provider_name!r} and adjust your request.",
|
|
352
356
|
),
|
|
357
|
+
ProviderErrorKind.CLIENT_ERROR: (
|
|
358
|
+
f"Model provider {model_provider_name!r} rejected the request for model {model_name!r} "
|
|
359
|
+
f"with HTTP status {exception.status_code} while {purpose}.",
|
|
360
|
+
"Verify the model name, credentials, and model configuration. If the provider is behind a gateway or "
|
|
361
|
+
"proxy, contact its administrator and provide the HTTP status.",
|
|
362
|
+
),
|
|
353
363
|
ProviderErrorKind.INTERNAL_SERVER: (
|
|
354
364
|
f"Model {model_name!r} is currently experiencing internal server issues while {purpose}.",
|
|
355
365
|
f"Try again in a few moments. Check with your model provider {model_provider_name!r} if the issue persists.",
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
+
import json
|
|
7
|
+
from typing import NoReturn
|
|
8
|
+
|
|
6
9
|
import json_repair
|
|
7
10
|
|
|
8
11
|
from data_designer.engine.models.parsers.types import (
|
|
@@ -41,6 +44,7 @@ def merge_text_blocks(
|
|
|
41
44
|
def deserialize_json_code(
|
|
42
45
|
structured_response: LLMStructuredResponse,
|
|
43
46
|
) -> LLMStructuredResponse:
|
|
47
|
+
"""Deserialize fenced JSON, falling back to a complete bare JSON response."""
|
|
44
48
|
processed_response = structured_response.model_copy()
|
|
45
49
|
processed_response.parsed = []
|
|
46
50
|
|
|
@@ -54,4 +58,15 @@ def deserialize_json_code(
|
|
|
54
58
|
else:
|
|
55
59
|
processed_response.parsed.append(block)
|
|
56
60
|
|
|
61
|
+
if not any(isinstance(block, StructuredDataBlock) for block in processed_response.parsed):
|
|
62
|
+
try:
|
|
63
|
+
deserialized = json.loads(structured_response.response, parse_constant=_reject_json_constant)
|
|
64
|
+
except ValueError:
|
|
65
|
+
return processed_response
|
|
66
|
+
processed_response.parsed = [StructuredDataBlock(serialized=structured_response.response, obj=deserialized)]
|
|
67
|
+
|
|
57
68
|
return processed_response
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _reject_json_constant(value: str) -> NoReturn:
|
|
72
|
+
raise ValueError(f"Non-standard JSON constant: {value}")
|
|
@@ -82,7 +82,7 @@ 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
|
|
85
|
+
no_extra_properties (bool): If `True`, then validation will fail
|
|
86
86
|
if extra properties are encountered in the returned JSON response.
|
|
87
87
|
Default=True.
|
|
88
88
|
"""
|
|
@@ -139,7 +139,7 @@ class StructuredResponseRecipe(ResponseRecipe[dict]):
|
|
|
139
139
|
return validate(obj, **self._validate_args)
|
|
140
140
|
except IndexError:
|
|
141
141
|
raise ParserException(
|
|
142
|
-
"No parsable JSON
|
|
142
|
+
"No parsable JSON found: expected a ```json markdown fence or a complete bare JSON response.",
|
|
143
143
|
source=response,
|
|
144
144
|
) from None
|
|
145
145
|
except JSONSchemaValidationError as exc:
|
|
@@ -219,7 +219,7 @@ class PydanticResponseRecipe(ResponseRecipe[BaseModel]):
|
|
|
219
219
|
return self.data_type.model_validate(obj)
|
|
220
220
|
except IndexError:
|
|
221
221
|
raise ParserException(
|
|
222
|
-
"No parsable JSON
|
|
222
|
+
"No parsable JSON found: expected a ```json markdown fence or a complete bare JSON response.",
|
|
223
223
|
source=response,
|
|
224
224
|
) from None
|
|
225
225
|
except Exception as exc:
|
|
@@ -51,7 +51,6 @@ class RequestFairQueue:
|
|
|
51
51
|
self._queued: dict[str, RequestWaiter] = {}
|
|
52
52
|
self._waiter_groups: dict[str, RequestResourceKey] = {}
|
|
53
53
|
self._group_finish: dict[RequestResourceKey, float] = {}
|
|
54
|
-
self._heap: list[tuple[float, int, RequestResourceKey]] = []
|
|
55
54
|
self._active_heap_entries: dict[RequestResourceKey, tuple[float, int]] = {}
|
|
56
55
|
self._sequence = 0
|
|
57
56
|
self._sequence_version = 0
|
|
@@ -83,7 +82,11 @@ class RequestFairQueue:
|
|
|
83
82
|
waiter = self._queued.pop(waiter_id, None)
|
|
84
83
|
if waiter is None:
|
|
85
84
|
return None
|
|
86
|
-
self._waiter_groups.pop(waiter_id, None)
|
|
85
|
+
key = self._waiter_groups.pop(waiter_id, None)
|
|
86
|
+
if key is not None:
|
|
87
|
+
self._purge_queue_head(key)
|
|
88
|
+
if not self._queues.get(key):
|
|
89
|
+
self._active_heap_entries.pop(key, None)
|
|
87
90
|
self._sequence_version += 1
|
|
88
91
|
return waiter
|
|
89
92
|
|
|
@@ -91,7 +94,7 @@ class RequestFairQueue:
|
|
|
91
94
|
self, is_eligible: Callable[[RequestWaiter, RequestQueueView], bool]
|
|
92
95
|
) -> RequestQueueSelection | None:
|
|
93
96
|
view = self.view()
|
|
94
|
-
heap_copy =
|
|
97
|
+
heap_copy = [(finish, sequence, key) for key, (finish, sequence) in self._active_heap_entries.items()]
|
|
95
98
|
heapq.heapify(heap_copy)
|
|
96
99
|
active_seen: set[RequestResourceKey] = set()
|
|
97
100
|
while heap_copy:
|
|
@@ -165,7 +168,6 @@ class RequestFairQueue:
|
|
|
165
168
|
return
|
|
166
169
|
self._sequence += 1
|
|
167
170
|
finish = self._group_finish.get(key, self._virtual_time)
|
|
168
|
-
heapq.heappush(self._heap, (finish, self._sequence, key))
|
|
169
171
|
self._active_heap_entries[key] = (finish, self._sequence)
|
|
170
172
|
|
|
171
173
|
def _first_valid_waiter(self, key: RequestResourceKey) -> RequestWaiter | None:
|
|
@@ -62,6 +62,7 @@ def ast_count_name_references(ast: j_nodes.Node, name: str) -> int:
|
|
|
62
62
|
|
|
63
63
|
Args:
|
|
64
64
|
ast (jinja2.nodes.Node): The starting Jinja2 AST node
|
|
65
|
+
name (str): The variable name to count references to.
|
|
65
66
|
|
|
66
67
|
Returns:
|
|
67
68
|
int: The number of nodes descended from the provided node whose
|
|
@@ -180,6 +180,11 @@ class UserTemplateSandboxEnvironment(ImmutableSandboxedEnvironment):
|
|
|
180
180
|
or may be malicious in nature. If not specified, defaults to
|
|
181
181
|
MAX_AST_DEPTH set by this module.
|
|
182
182
|
|
|
183
|
+
prefer_dict_key_access (optional, bool): When enabled, prefer dict key
|
|
184
|
+
lookup over attribute access so that keys like "items" resolve to
|
|
185
|
+
dict["items"] instead of dict.items. If not specified, defaults to
|
|
186
|
+
False.
|
|
187
|
+
|
|
183
188
|
**kwargs: Additional kwargs passed to ImmutableSandboxedEnvironment.
|
|
184
189
|
"""
|
|
185
190
|
super().__init__(autoescape=False, **kwargs)
|
{data_designer_engine-0.9.2 → data_designer_engine-0.9.4}/src/data_designer/engine/validation.py
RENAMED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
+
import re
|
|
6
7
|
from enum import Enum
|
|
7
8
|
from fnmatch import fnmatch
|
|
8
9
|
from string import Formatter
|
|
@@ -260,7 +261,7 @@ def validate_columns_not_all_dropped(
|
|
|
260
261
|
processor_configs: list[ProcessorConfigT] | None = None,
|
|
261
262
|
) -> list[Violation]:
|
|
262
263
|
processor_configs = processor_configs or []
|
|
263
|
-
processor_dropped_columns =
|
|
264
|
+
processor_dropped_columns = resolve_processor_dropped_columns(columns, processor_configs)
|
|
264
265
|
remaining_cols = [
|
|
265
266
|
c
|
|
266
267
|
for c in columns
|
|
@@ -287,10 +288,11 @@ def validate_columns_not_all_dropped(
|
|
|
287
288
|
return []
|
|
288
289
|
|
|
289
290
|
|
|
290
|
-
def
|
|
291
|
+
def resolve_processor_dropped_columns(
|
|
291
292
|
columns: list[ColumnConfigT],
|
|
292
293
|
processor_configs: list[ProcessorConfigT],
|
|
293
294
|
) -> set[str]:
|
|
295
|
+
"""Return the column names targeted by drop processors, expanding globs against `columns`."""
|
|
294
296
|
column_names = {c.name for c in columns}
|
|
295
297
|
dropped_columns: set[str] = set()
|
|
296
298
|
for processor_config in processor_configs:
|
|
@@ -450,9 +452,28 @@ def validate_skip_references(
|
|
|
450
452
|
return violations
|
|
451
453
|
|
|
452
454
|
|
|
455
|
+
_FORMAT_FIELD_REFERENCE_PATTERN = re.compile(
|
|
456
|
+
r"(?<!\{)\{"
|
|
457
|
+
r"([^{}!:]+)"
|
|
458
|
+
r"(?:![sra])?"
|
|
459
|
+
r"(?::[^{}]*(?:\{[^{}]*\}[^{}]*)*)?"
|
|
460
|
+
r"\}"
|
|
461
|
+
)
|
|
462
|
+
|
|
463
|
+
|
|
453
464
|
def _get_string_formatter_references(template: str, allowed_references: list[str]) -> list[str]:
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
465
|
+
try:
|
|
466
|
+
return [
|
|
467
|
+
k[1].strip()
|
|
468
|
+
for k in Formatter().parse(template)
|
|
469
|
+
if len(k) > 1 and k[1] is not None and k[1].strip() in allowed_references
|
|
470
|
+
]
|
|
471
|
+
except ValueError:
|
|
472
|
+
# Unmatched literal braces (e.g. JSON examples like 'output format: }') are
|
|
473
|
+
# invalid f-string syntax but valid Jinja text, so ``Formatter().parse`` can
|
|
474
|
+
# raise ``ValueError``. Fall back to a tolerant regex scan that skips Jinja
|
|
475
|
+
# ``{{ ... }}`` expressions so the advisory check still detects ``{column}``
|
|
476
|
+
# references without crashing validation.
|
|
477
|
+
return [
|
|
478
|
+
ref for m in _FORMAT_FIELD_REFERENCE_PATTERN.findall(template) if (ref := m.strip()) in allowed_references
|
|
479
|
+
]
|
|
@@ -9,6 +9,7 @@ import pytest
|
|
|
9
9
|
|
|
10
10
|
import data_designer.lazy_heavy_imports as lazy
|
|
11
11
|
from data_designer.config.column_configs import ValidationColumnConfig
|
|
12
|
+
from data_designer.config.run_config import RunConfig
|
|
12
13
|
from data_designer.config.utils.code_lang import CodeLang
|
|
13
14
|
from data_designer.config.validator_params import (
|
|
14
15
|
CodeValidatorParams,
|
|
@@ -203,8 +204,16 @@ def test_validation_column_generator_generate_with_different_strategies(
|
|
|
203
204
|
assert len(result["validation_column"]) == len(df)
|
|
204
205
|
|
|
205
206
|
|
|
207
|
+
@pytest.mark.parametrize(
|
|
208
|
+
("disable", "rate", "expected_rate"),
|
|
209
|
+
[(True, 0.2, 1.0), (False, 0.2, 0.2)],
|
|
210
|
+
ids=["disabled-passes-effective-rate", "enabled-passes-configured-rate"],
|
|
211
|
+
)
|
|
206
212
|
@patch("data_designer.engine.column_generators.generators.validation.get_validator_from_params", autospec=True)
|
|
207
|
-
def test_validation_column_generator_validate_in_parallel_failure(
|
|
213
|
+
def test_validation_column_generator_validate_in_parallel_failure(
|
|
214
|
+
mock_get_validator: Mock, stub_resource_provider: Mock, disable: bool, rate: float, expected_rate: float
|
|
215
|
+
) -> None:
|
|
216
|
+
stub_resource_provider.run_config = RunConfig(disable_early_shutdown=disable, shutdown_error_rate=rate)
|
|
208
217
|
mock_validator = Mock()
|
|
209
218
|
mock_validator.run_validation.return_value = ValidationResult(data=[ValidationOutput(is_valid=True)])
|
|
210
219
|
mock_get_validator.return_value = mock_validator
|
|
@@ -242,3 +251,4 @@ def test_validation_column_generator_validate_in_parallel_failure(mock_get_valid
|
|
|
242
251
|
|
|
243
252
|
call_kwargs = mock_executor_class.call_args[1]
|
|
244
253
|
assert call_kwargs["disable_early_shutdown"] == stub_resource_provider.run_config.disable_early_shutdown
|
|
254
|
+
assert call_kwargs["shutdown_error_rate"] == expected_rate
|
|
@@ -4989,7 +4989,6 @@ async def test_scheduler_request_resource_admission_avoids_creating_waiters() ->
|
|
|
4989
4989
|
request_admission = AdaptiveRequestAdmissionController(
|
|
4990
4990
|
RequestAdmissionConfig(
|
|
4991
4991
|
initial_limits={resource: 4},
|
|
4992
|
-
default_queue_wait_timeout_seconds=0.02,
|
|
4993
4992
|
),
|
|
4994
4993
|
event_sink=sink,
|
|
4995
4994
|
)
|
|
@@ -59,7 +59,9 @@ class StubHttpResponse:
|
|
|
59
59
|
(400, "maximum context length exceeded", ProviderErrorKind.CONTEXT_WINDOW_EXCEEDED),
|
|
60
60
|
(500, "", ProviderErrorKind.INTERNAL_SERVER),
|
|
61
61
|
(503, "", ProviderErrorKind.INTERNAL_SERVER),
|
|
62
|
-
(418, "", ProviderErrorKind.
|
|
62
|
+
(418, "", ProviderErrorKind.CLIENT_ERROR),
|
|
63
|
+
(424, "", ProviderErrorKind.CLIENT_ERROR),
|
|
64
|
+
(302, "", ProviderErrorKind.API_ERROR),
|
|
63
65
|
],
|
|
64
66
|
)
|
|
65
67
|
def test_map_http_status_to_provider_error_kind(
|