dataenginex 0.4.2__tar.gz → 0.4.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.
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.claude/commands/new-feature.md +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.claude/commands/validate.md +7 -6
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/dependabot.yml +0 -2
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/release-pr-template.md +1 -1
- dataenginex-0.4.4/.github/workflows/auto-pr.yml +16 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/workflows/ci.yml +9 -5
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/workflows/release.yml +3 -3
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/workflows/security.yml +3 -3
- {dataenginex-0.4.2 → dataenginex-0.4.4}/CLAUDE.md +6 -6
- {dataenginex-0.4.2 → dataenginex-0.4.4}/CONTRIBUTING.md +5 -5
- {dataenginex-0.4.2 → dataenginex-0.4.4}/PKG-INFO +1 -3
- {dataenginex-0.4.2 → dataenginex-0.4.4}/README.md +3 -5
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docker-compose.test.yml +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/adr/0001-medallion-architecture.md +3 -3
- dataenginex-0.4.4/docs/api-reference/ai.md +191 -0
- dataenginex-0.4.4/docs/api-reference/config.md +84 -0
- dataenginex-0.4.4/docs/api-reference/core.md +143 -0
- dataenginex-0.4.4/docs/api-reference/data.md +279 -0
- dataenginex-0.4.4/docs/api-reference/engine.md +96 -0
- dataenginex-0.4.4/docs/api-reference/index.md +19 -0
- dataenginex-0.4.4/docs/api-reference/lakehouse.md +78 -0
- dataenginex-0.4.4/docs/api-reference/middleware.md +73 -0
- dataenginex-0.4.4/docs/api-reference/ml.md +172 -0
- dataenginex-0.4.4/docs/api-reference/orchestration.md +59 -0
- dataenginex-0.4.4/docs/api-reference/plugins.md +53 -0
- dataenginex-0.4.4/docs/api-reference/secops.md +121 -0
- dataenginex-0.4.4/docs/api-reference/warehouse.md +67 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/architecture.md +5 -8
- dataenginex-0.4.4/docs/ci-cd.md +97 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/contributing.md +4 -4
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/development.md +6 -6
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/quickstart.md +2 -2
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/release-notes.md +4 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/sdlc.md +12 -55
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/security-scanning.md +2 -2
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/01_hello_pipeline.py +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/02_api_quickstart.py +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/07_api_ingestion.py +1 -11
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/08_spark_ml.py +3 -3
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/09_feature_engineering.py +2 -2
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/10_model_analysis.py +3 -3
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/dashboard/dashboard_config.yaml +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/dashboard/run_dashboard.py +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/poe_tasks.toml +3 -4
- {dataenginex-0.4.2 → dataenginex-0.4.4}/pyproject.toml +3 -4
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/__init__.py +2 -3
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/_json.py +8 -9
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/__init__.py +1 -35
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/memory/__init__.py +0 -3
- dataenginex-0.4.4/src/dataenginex/ai/observability/__init__.py +9 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/observability/metrics.py +6 -6
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/runtime/__init__.py +0 -3
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/runtime/sandbox.py +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/api/pagination.py +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/config/schema.py +56 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/core/__init__.py +1 -6
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/core/exceptions.py +3 -46
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/core/medallion_architecture.py +1 -123
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/core/schemas.py +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/core/validators.py +105 -105
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/__init__.py +0 -21
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/__init__.py +7 -18
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/dbt.py +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/spark.py +2 -2
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/pipeline/__init__.py +0 -3
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/pipeline/dag.py +46 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/registry.py +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/engine.py +1 -14
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/lakehouse/partitioning.py +109 -109
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/lakehouse/storage.py +1 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/mlflow_registry.py +2 -2
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/conftest.py +162 -162
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/fixtures/sample_data.py +2 -2
- dataenginex-0.4.4/tests/integration/__init__.py +1 -0
- dataenginex-0.4.4/tests/unit/__init__.py +1 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_core_schemas_extended.py +1 -16
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_data.py +126 -230
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_llm.py +2 -2
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_medallion.py +166 -251
- {dataenginex-0.4.2 → dataenginex-0.4.4}/uv.lock +149 -194
- dataenginex-0.4.2/.github/workflows/auto-pr.yml +0 -23
- dataenginex-0.4.2/.github/workflows/enforce-dev-to-main.yml +0 -11
- dataenginex-0.4.2/Dockerfile +0 -53
- dataenginex-0.4.2/docs/api-reference/core.md +0 -5
- dataenginex-0.4.2/docs/api-reference/data.md +0 -5
- dataenginex-0.4.2/docs/api-reference/index.md +0 -14
- dataenginex-0.4.2/docs/api-reference/lakehouse.md +0 -5
- dataenginex-0.4.2/docs/api-reference/middleware.md +0 -5
- dataenginex-0.4.2/docs/api-reference/ml.md +0 -45
- dataenginex-0.4.2/docs/api-reference/plugins.md +0 -5
- dataenginex-0.4.2/docs/api-reference/warehouse.md +0 -5
- dataenginex-0.4.2/docs/ci-cd.md +0 -361
- dataenginex-0.4.2/src/dataenginex/ai/observability/__init__.py +0 -15
- dataenginex-0.4.2/src/dataenginex/data/connectors/legacy.py +0 -365
- dataenginex-0.4.2/tests/integration/__init__.py +0 -1
- dataenginex-0.4.2/tests/unit/__init__.py +0 -1
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.claude/settings.json +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.env.template +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/labels.yml +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.github/workflows/docs-sync.yml +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.gitignore +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.gitleaks.toml +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.pre-commit-config.yaml +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/.python-version +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/CHANGELOG.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/CODEOWNERS +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/CODE_OF_CONDUCT.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/LICENSE +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/SECURITY.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/adr/0000-template.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/api-reference/api.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/index.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/docs/observability.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/03_quality_gate.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/04_ml_training.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/05_rag_demo.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/06_llm_quickstart.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/GUIDE.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/data/events.csv +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/data/users.csv +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/dex.yaml +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/ecommerce/data/customers.csv +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/ecommerce/data/orders.csv +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/ecommerce/data/products.csv +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/ecommerce/dex.yaml +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/ecommerce/run_all.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/examples/movies.csv +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/scripts/localstack/init.sh +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/README.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/RELEASE_NOTES.md +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/agents/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/agents/builtin.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/llm.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/memory/base.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/memory/episodic.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/memory/long_term.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/observability/audit.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/observability/cost.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/retrieval/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/retrieval/builtin.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/retrieval/graph.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/routing/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/routing/anthropic.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/routing/guarded.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/routing/ollama.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/routing/openai.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/routing/router.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/runtime/checkpoint.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/runtime/executor.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/tools/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/tools/builtin.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/vectorstore.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/workflows/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/workflows/conditions.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/workflows/dag.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ai/workflows/human_loop.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/api/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/api/errors.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/api/schemas.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/cli/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/cli/main.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/cli/run.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/cli/secops.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/cli/train.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/config/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/config/defaults.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/config/loader.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/config/settings.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/core/interfaces.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/core/quality.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/core/registry.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/_utils.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/csv.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/delta.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/duckdb.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/http.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/parquet.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/rest.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/connectors/sse.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/pipeline/run_history.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/pipeline/runner.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/profiler.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/quality/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/quality/gates.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/quality/spark.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/transforms/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/data/transforms/sql.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/lakehouse/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/lakehouse/catalog.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/middleware/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/middleware/domain_metrics.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/middleware/logging_config.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/middleware/metrics.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/drift.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/features/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/features/builtin.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/metrics.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/registry.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/serving.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/serving_engine/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/serving_engine/builtin.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/tracking/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/tracking/builtin.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/ml/training.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/orchestration/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/orchestration/builtin.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/orchestration/scheduler.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/plugins/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/plugins/registry.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/py.typed +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/secops/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/secops/audit.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/secops/gate.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/secops/guard.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/secops/masking.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/secops/pii.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/store.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/warehouse/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/warehouse/lineage.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/warehouse/transforms.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/src/dataenginex/worker.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/conformance/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/conformance/test_connector.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/conformance/test_feature_store.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/conformance/test_tracker.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/conformance/test_transform.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/fixtures/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/fixtures/sample_jobs.csv +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/fixtures/sample_jobs.json +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/integration/test_ai_integration.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/integration/test_cli_run.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/integration/test_config_cli.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/integration/test_lineage_integration.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/integration/test_ml_integration.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/integration/test_pipeline_e2e.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/integration/test_secops_integration.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/integration/test_storage_real.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/load/__init__.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_agent_runtime.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_ai_modules.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_api_pagination.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_api_schemas.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_api_validators.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_builtin_agent.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_builtin_feature_store.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_builtin_serving.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_builtin_tracker.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_cli_train.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_config_loader.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_config_schema.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_config_schema_extended.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_core_exceptions.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_core_interfaces.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_core_quality.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_core_registry.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_csv_connector.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_dbt_connector.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_dex_engine.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_dex_store.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_domain_metrics.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_domain_metrics_wiring.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_drift_scheduler.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_duckdb_connector.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_guarded_provider.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_lakehouse.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_llm_extended.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_llm_litellm_vllm.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_logging.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_medallion_extended.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_middleware_metrics.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_ml.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_parquet_connector.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_pipeline_dag.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_pipeline_runner.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_plugins.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_privacy_guard_wiring.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_quality_gates.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_quality_spark.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_retriever.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_retriever_graph.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_run_history.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_scheduler.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_secops.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_secops_engine_and_cli.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_secops_guard.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_spark_connector.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_spark_fixtures.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_sql_transforms.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_storage_abstraction.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_vectorstore.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_vectorstore_extended.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_warehouse.py +0 -0
- {dataenginex-0.4.2 → dataenginex-0.4.4}/tests/unit/test_warehouse_transforms.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Validate (
|
|
1
|
+
# Validate (DataEngineX)
|
|
2
2
|
|
|
3
|
-
Run the full
|
|
3
|
+
Run the full DataEngineX validation pipeline in order. Stop and report on first failure.
|
|
4
4
|
|
|
5
5
|
1. **Lint**
|
|
6
6
|
|
|
@@ -25,10 +25,11 @@ Run the full DEX validation pipeline in order. Stop and report on first failure.
|
|
|
25
25
|
```bash
|
|
26
26
|
uv run python examples/02_api_quickstart.py &
|
|
27
27
|
sleep 2
|
|
28
|
-
|
|
29
|
-
curl -sf http://localhost:
|
|
30
|
-
curl -sf http://localhost:
|
|
31
|
-
curl -sf
|
|
28
|
+
# dataenginex has no built-in HTTP server; these endpoints apply to dex-studio
|
|
29
|
+
curl -sf http://localhost:7860/health | python -m json.tool
|
|
30
|
+
curl -sf http://localhost:7860/ | python -m json.tool
|
|
31
|
+
curl -sf http://localhost:7860/metrics | head -20
|
|
32
|
+
curl -sf -X POST http://localhost:7860/echo -H "Content-Type: application/json" -d '{"message":"test"}' | python -m json.tool
|
|
32
33
|
```
|
|
33
34
|
|
|
34
35
|
Check response **bodies** — not just status codes. Kill the server after.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Release PR Template
|
|
2
2
|
|
|
3
|
-
Use this template whenever opening a release PR
|
|
3
|
+
Use this template whenever opening a release PR to `main`. Reference `release-notes.md` and verify QA steps before merging.
|
|
4
4
|
|
|
5
5
|
## Summary
|
|
6
6
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: Auto PR
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- '*'
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
auto-pr:
|
|
14
|
+
if: github.ref_name != 'main'
|
|
15
|
+
uses: TheDataEngineX/.github/.github/workflows/reusable-auto-pr-to-main.yml@main
|
|
16
|
+
secrets: inherit
|
|
@@ -2,9 +2,9 @@ name: CI
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
-
branches: [main
|
|
5
|
+
branches: [main]
|
|
6
6
|
pull_request:
|
|
7
|
-
branches: [main
|
|
7
|
+
branches: [main]
|
|
8
8
|
workflow_dispatch:
|
|
9
9
|
|
|
10
10
|
schedule:
|
|
@@ -19,7 +19,7 @@ jobs:
|
|
|
19
19
|
name: Code Quality
|
|
20
20
|
runs-on: ubuntu-latest
|
|
21
21
|
steps:
|
|
22
|
-
- uses: actions/checkout@
|
|
22
|
+
- uses: actions/checkout@v7
|
|
23
23
|
- uses: astral-sh/setup-uv@v8.2.0
|
|
24
24
|
with:
|
|
25
25
|
version: "latest"
|
|
@@ -27,14 +27,18 @@ jobs:
|
|
|
27
27
|
- run: uv sync --group ml
|
|
28
28
|
env:
|
|
29
29
|
UV_PROJECT_ENVIRONMENT: .venv
|
|
30
|
+
- uses: reviewdog/action-actionlint@v1
|
|
31
|
+
|
|
30
32
|
- run: uv run poe quality
|
|
31
33
|
|
|
34
|
+
- run: uv build
|
|
35
|
+
|
|
32
36
|
test:
|
|
33
37
|
name: Tests (Python 3.13)
|
|
34
38
|
runs-on: ubuntu-latest
|
|
35
39
|
needs: quality
|
|
36
40
|
steps:
|
|
37
|
-
- uses: actions/checkout@
|
|
41
|
+
- uses: actions/checkout@v7
|
|
38
42
|
- uses: astral-sh/setup-uv@v8.2.0
|
|
39
43
|
with:
|
|
40
44
|
version: "latest"
|
|
@@ -58,7 +62,7 @@ jobs:
|
|
|
58
62
|
matrix:
|
|
59
63
|
python-version: ["3.11", "3.12"]
|
|
60
64
|
steps:
|
|
61
|
-
- uses: actions/checkout@
|
|
65
|
+
- uses: actions/checkout@v7
|
|
62
66
|
- uses: astral-sh/setup-uv@v8.2.0
|
|
63
67
|
with:
|
|
64
68
|
version: "latest"
|
|
@@ -23,7 +23,7 @@ jobs:
|
|
|
23
23
|
permissions:
|
|
24
24
|
contents: read
|
|
25
25
|
steps:
|
|
26
|
-
- uses: actions/checkout@
|
|
26
|
+
- uses: actions/checkout@v7
|
|
27
27
|
with:
|
|
28
28
|
ref: ${{ inputs.ref || github.ref }}
|
|
29
29
|
- uses: astral-sh/setup-uv@v8.2.0
|
|
@@ -58,7 +58,7 @@ jobs:
|
|
|
58
58
|
permissions:
|
|
59
59
|
contents: write
|
|
60
60
|
steps:
|
|
61
|
-
- uses: actions/checkout@
|
|
61
|
+
- uses: actions/checkout@v7
|
|
62
62
|
with:
|
|
63
63
|
ref: ${{ inputs.ref || github.ref }}
|
|
64
64
|
- uses: astral-sh/setup-uv@v8.2.0
|
|
@@ -80,6 +80,6 @@ jobs:
|
|
|
80
80
|
RELEASE_TAG: ${{ inputs.tag || github.ref_name }}
|
|
81
81
|
run: |
|
|
82
82
|
gh release create "$RELEASE_TAG" \
|
|
83
|
-
--title "
|
|
83
|
+
--title "dataenginex $RELEASE_TAG" \
|
|
84
84
|
--generate-notes \
|
|
85
85
|
"sbom-dex-${{ steps.version.outputs.version }}.json"
|
|
@@ -2,9 +2,9 @@ name: Security Scans
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
-
branches: [main
|
|
5
|
+
branches: [main]
|
|
6
6
|
pull_request:
|
|
7
|
-
branches: [main
|
|
7
|
+
branches: [main]
|
|
8
8
|
workflow_dispatch:
|
|
9
9
|
|
|
10
10
|
permissions:
|
|
@@ -13,5 +13,5 @@ permissions:
|
|
|
13
13
|
|
|
14
14
|
jobs:
|
|
15
15
|
security:
|
|
16
|
-
uses: TheDataEngineX/.github/.github/workflows/security.yml@main
|
|
16
|
+
uses: TheDataEngineX/.github/.github/workflows/reusable-security.yml@main
|
|
17
17
|
secrets: inherit
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# CLAUDE.md —
|
|
1
|
+
# CLAUDE.md — DataEngineX (dataenginex)
|
|
2
2
|
|
|
3
3
|
Brief answers only. No explanations unless asked.
|
|
4
4
|
Goal is to save Claude code tokens for lower cost without losing quality.
|
|
@@ -7,7 +7,7 @@ Goal is to save Claude code tokens for lower cost without losing quality.
|
|
|
7
7
|
|
|
8
8
|
## Project Overview
|
|
9
9
|
|
|
10
|
-
**
|
|
10
|
+
**DataEngineX** — unified Data + ML + AI library. Config-driven, self-hosted, local-first. Pure Python — no bundled HTTP server.
|
|
11
11
|
|
|
12
12
|
| Package | Location | Purpose |
|
|
13
13
|
|---------|----------|---------|
|
|
@@ -41,7 +41,7 @@ dex validate dex.yaml # Validate config file
|
|
|
41
41
|
dex version # Show version + environment
|
|
42
42
|
|
|
43
43
|
# Dev
|
|
44
|
-
uv run poe dev # Dev server (uvicorn reload, port 17000) — for examples/API testing only
|
|
44
|
+
uv run poe dev # Dev server (uvicorn reload, port 17000) — for examples/API testing only (dataenginex has no built-in HTTP server; see dex-studio for web UI)
|
|
45
45
|
uv run poe docker-up # Docker compose up
|
|
46
46
|
uv run poe docker-down # Docker compose down
|
|
47
47
|
|
|
@@ -63,7 +63,7 @@ pip install 'litellm>=1.83.3' --no-deps # LLM routing (separate: pins python-dot
|
|
|
63
63
|
|
|
64
64
|
______________________________________________________________________
|
|
65
65
|
|
|
66
|
-
##
|
|
66
|
+
## Validation
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
Tests passing ≠ app working.
|
|
68
|
+
After any code change run: `uv run poe check-all` (lint + typecheck + test).
|
|
69
|
+
Tests passing ≠ app working — run `dex validate dex.yaml` to verify config.
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
# Contributing to
|
|
1
|
+
# Contributing to DataEngineX
|
|
2
2
|
|
|
3
3
|
Thank you for your interest in contributing to DataEngineX!
|
|
4
4
|
|
|
5
|
-
**→ Full contributor guide: [docs/
|
|
5
|
+
**→ Full contributor guide: [docs/contributing.md](docs/contributing.md)**
|
|
6
6
|
|
|
7
7
|
Quick essentials:
|
|
8
8
|
|
|
9
|
-
- Development setup: [docs/
|
|
10
|
-
- Governance & legal: See [docs/
|
|
9
|
+
- Development setup: [docs/development.md](docs/development.md)
|
|
10
|
+
- Governance & legal: See [docs/contributing.md](docs/contributing.md)
|
|
11
11
|
- Code of Conduct: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
|
|
12
12
|
|
|
13
13
|
## Quick Start
|
|
14
14
|
|
|
15
|
-
1. Fork and create a feature branch from `
|
|
15
|
+
1. Fork and create a feature branch from `main`
|
|
16
16
|
1. Run local checks: `uv run poe check-all`
|
|
17
17
|
1. Open a PR using `.github/PULL_REQUEST_TEMPLATE.md`
|
|
18
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataenginex
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: DataEngineX — open-source, self-hosted, local-first Data + ML + AI workbench library
|
|
5
5
|
Author-email: Jay <jayapal.myaka99@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -30,7 +30,6 @@ Requires-Dist: click>=8.3.3
|
|
|
30
30
|
Requires-Dist: croniter>=6.2.2
|
|
31
31
|
Requires-Dist: duckdb>=1.5.2
|
|
32
32
|
Requires-Dist: httpx>=0.28.1
|
|
33
|
-
Requires-Dist: msgpack>=1.2.1
|
|
34
33
|
Requires-Dist: orjson>=3.11.0
|
|
35
34
|
Requires-Dist: prometheus-client>=0.25.0
|
|
36
35
|
Requires-Dist: pyarrow>=23.0.1
|
|
@@ -38,7 +37,6 @@ Requires-Dist: pydantic-settings>=2.14.2
|
|
|
38
37
|
Requires-Dist: pydantic>=2.13.4
|
|
39
38
|
Requires-Dist: pyyaml>=6.0.3
|
|
40
39
|
Requires-Dist: structlog>=25.5.0
|
|
41
|
-
Requires-Dist: zstandard>=0.25.0
|
|
42
40
|
Provides-Extra: cloud
|
|
43
41
|
Requires-Dist: boto3>=1.43.7; extra == 'cloud'
|
|
44
42
|
Requires-Dist: google-cloud-bigquery>=3.41.0; extra == 'cloud'
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
# dataenginex
|
|
2
2
|
|
|
3
|
-
[](https://github.com/TheDataEngineX/dataenginex/actions/workflows/ci.yml)
|
|
4
4
|
[](https://pypi.org/project/dataenginex/)
|
|
5
5
|
[](https://www.python.org/downloads/)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
|
|
8
|
-
The Python library that powers [
|
|
9
|
-
|
|
10
|
-
> **Pre-1.0 status.** `0.4.0` is honest about it. See the [CHANGELOG scope-reset entry](CHANGELOG.md) for the rationale.
|
|
8
|
+
The Python library that powers [DataEngineX Studio](https://github.com/TheDataEngineX/dex-studio) — an open-source, self-hosted, local-first Data + ML + AI workbench for individuals and small teams. **Use the library directly when you want code; install DataEngineX Studio when you want a UI.**
|
|
11
9
|
|
|
12
10
|
______________________________________________________________________
|
|
13
11
|
|
|
@@ -118,7 +116,7 @@ git clone https://github.com/TheDataEngineX/dex-studio && cd dex-studio
|
|
|
118
116
|
docker compose up # http://localhost:7860
|
|
119
117
|
```
|
|
120
118
|
|
|
121
|
-
|
|
119
|
+
DataEngineX Studio imports `dataenginex` directly — no separate API server, no HTTP hop.
|
|
122
120
|
|
|
123
121
|
______________________________________________________________________
|
|
124
122
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# ---------------------------------------------------------------
|
|
2
|
-
#
|
|
2
|
+
# DataEngineX — Storage Emulators for Integration Tests
|
|
3
3
|
#
|
|
4
4
|
# Spins up LocalStack (S3) and fake-gcs-server (GCS) for local
|
|
5
5
|
# integration testing without real cloud accounts.
|
|
@@ -8,18 +8,18 @@
|
|
|
8
8
|
|
|
9
9
|
## Context
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
DataEngineX needs a scalable, standardized data architecture that works across all projects (CareerDEX, Weather, etc.). The data pipeline needs to handle:
|
|
12
12
|
|
|
13
13
|
- Raw data ingestion from multiple sources
|
|
14
14
|
- Data transformation and quality validation
|
|
15
15
|
- Feature engineering for ML models
|
|
16
16
|
- Analytics-ready data consumption
|
|
17
17
|
|
|
18
|
-
Multiple projects will be built on the
|
|
18
|
+
Multiple projects will be built on the DataEngineX platform, each with different data sources and transformations. We need a consistent, reusable pattern.
|
|
19
19
|
|
|
20
20
|
## Decision
|
|
21
21
|
|
|
22
|
-
Implement the **Medallion Architecture** (Bronze → Silver → Gold layers) as the standard data architecture for all
|
|
22
|
+
Implement the **Medallion Architecture** (Bronze → Silver → Gold layers) as the standard data architecture for all DataEngineX projects.
|
|
23
23
|
|
|
24
24
|
### Architecture Layers
|
|
25
25
|
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# dataenginex.ai
|
|
2
|
+
|
|
3
|
+
LLM routing, agent runtimes, vector stores, memory, retrieval, observability, and workflow orchestration.
|
|
4
|
+
|
|
5
|
+
## Quick import
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from dataenginex.ai import (
|
|
9
|
+
ModelRouter, BaseProvider,
|
|
10
|
+
LLMProvider, LLMResponse,
|
|
11
|
+
BuiltinAgentRuntime,
|
|
12
|
+
BuiltinRetriever,
|
|
13
|
+
VectorStore,
|
|
14
|
+
SandboxConfig,
|
|
15
|
+
)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
______________________________________________________________________
|
|
19
|
+
|
|
20
|
+
## LLM Interface
|
|
21
|
+
|
|
22
|
+
`dataenginex.ai.llm`
|
|
23
|
+
|
|
24
|
+
Unified LLM request/response interface across providers. Handles streaming, tool calls, retries, and token counting.
|
|
25
|
+
|
|
26
|
+
::: dataenginex.ai.llm
|
|
27
|
+
|
|
28
|
+
**Key classes:** `LLMProvider`, `LLMResponse`, `LLMMessage`, `ToolCall`
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
from dataenginex.ai.llm import LLMMessage
|
|
32
|
+
|
|
33
|
+
response = provider.complete([
|
|
34
|
+
LLMMessage(role="user", content="Summarize this dataset."),
|
|
35
|
+
])
|
|
36
|
+
print(response.content)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
______________________________________________________________________
|
|
40
|
+
|
|
41
|
+
## Model Router
|
|
42
|
+
|
|
43
|
+
`dataenginex.ai.routing.router`
|
|
44
|
+
|
|
45
|
+
Routes LLM requests to the appropriate provider based on cost, latency, capability, and fallback rules.
|
|
46
|
+
|
|
47
|
+
::: dataenginex.ai.routing.router
|
|
48
|
+
|
|
49
|
+
**Key class:** `ModelRouter`
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
from dataenginex.ai.routing.router import ModelRouter
|
|
53
|
+
|
|
54
|
+
router = ModelRouter.from_config(engine.config)
|
|
55
|
+
response = router.complete("Explain this error.", model_hint="fast")
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Providers
|
|
59
|
+
|
|
60
|
+
`dataenginex.ai.routing.anthropic` · `dataenginex.ai.routing.openai` · `dataenginex.ai.routing.ollama` · `dataenginex.ai.routing.guarded`
|
|
61
|
+
|
|
62
|
+
::: dataenginex.ai.routing.anthropic
|
|
63
|
+
::: dataenginex.ai.routing.openai
|
|
64
|
+
::: dataenginex.ai.routing.ollama
|
|
65
|
+
::: dataenginex.ai.routing.guarded
|
|
66
|
+
|
|
67
|
+
______________________________________________________________________
|
|
68
|
+
|
|
69
|
+
## Agents
|
|
70
|
+
|
|
71
|
+
`dataenginex.ai.agents.builtin`
|
|
72
|
+
|
|
73
|
+
Built-in agent runtime — tool-use loop, memory injection, step tracing, and structured output parsing.
|
|
74
|
+
|
|
75
|
+
::: dataenginex.ai.agents.builtin
|
|
76
|
+
|
|
77
|
+
**Key class:** `BuiltinAgentRuntime`
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
from dataenginex.ai.agents.builtin import BuiltinAgentRuntime
|
|
81
|
+
|
|
82
|
+
agent = BuiltinAgentRuntime(router=router, tools=[search_tool, sql_tool])
|
|
83
|
+
result = agent.run("Find the top 10 customers by revenue last quarter.")
|
|
84
|
+
print(result.output)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
______________________________________________________________________
|
|
88
|
+
|
|
89
|
+
## Vector Store
|
|
90
|
+
|
|
91
|
+
`dataenginex.ai.vectorstore`
|
|
92
|
+
|
|
93
|
+
Embedding storage and similarity search. Defaults to in-process DuckDB VSS; swap for Qdrant via `dataenginex[qdrant]`.
|
|
94
|
+
|
|
95
|
+
::: dataenginex.ai.vectorstore
|
|
96
|
+
|
|
97
|
+
**Key class:** `VectorStore`
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
from dataenginex.ai.vectorstore import VectorStore
|
|
101
|
+
|
|
102
|
+
store = VectorStore(db_path=".dex/store.duckdb")
|
|
103
|
+
store.upsert("doc-1", embedding=[0.1, 0.2, ...], metadata={"source": "wiki"})
|
|
104
|
+
results = store.search(query_embedding, top_k=5)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
______________________________________________________________________
|
|
108
|
+
|
|
109
|
+
## Memory
|
|
110
|
+
|
|
111
|
+
`dataenginex.ai.memory.base` — abstract memory interface
|
|
112
|
+
|
|
113
|
+
::: dataenginex.ai.memory.base
|
|
114
|
+
|
|
115
|
+
`dataenginex.ai.memory.episodic` — short-term conversation memory scoped to a single agent session
|
|
116
|
+
|
|
117
|
+
::: dataenginex.ai.memory.episodic
|
|
118
|
+
|
|
119
|
+
`dataenginex.ai.memory.long_term` — persistent memory backed by the vector store, survives across sessions
|
|
120
|
+
|
|
121
|
+
::: dataenginex.ai.memory.long_term
|
|
122
|
+
|
|
123
|
+
______________________________________________________________________
|
|
124
|
+
|
|
125
|
+
## Retrieval
|
|
126
|
+
|
|
127
|
+
`dataenginex.ai.retrieval.builtin` — RAG retriever: embeds query, searches vector store, returns ranked chunks
|
|
128
|
+
|
|
129
|
+
::: dataenginex.ai.retrieval.builtin
|
|
130
|
+
|
|
131
|
+
`dataenginex.ai.retrieval.graph` — graph-based retrieval for structured knowledge graphs
|
|
132
|
+
|
|
133
|
+
::: dataenginex.ai.retrieval.graph
|
|
134
|
+
|
|
135
|
+
______________________________________________________________________
|
|
136
|
+
|
|
137
|
+
## Runtime
|
|
138
|
+
|
|
139
|
+
`dataenginex.ai.runtime.executor` — async execution engine with concurrency, timeout, and step-level error handling
|
|
140
|
+
|
|
141
|
+
::: dataenginex.ai.runtime.executor
|
|
142
|
+
|
|
143
|
+
`dataenginex.ai.runtime.checkpoint` — saves and restores agent run state for long-running or resumable workflows
|
|
144
|
+
|
|
145
|
+
::: dataenginex.ai.runtime.checkpoint
|
|
146
|
+
|
|
147
|
+
`dataenginex.ai.runtime.sandbox` — isolated code execution sandbox for agent-generated Python with configurable resource limits
|
|
148
|
+
|
|
149
|
+
::: dataenginex.ai.runtime.sandbox
|
|
150
|
+
|
|
151
|
+
______________________________________________________________________
|
|
152
|
+
|
|
153
|
+
## Tools
|
|
154
|
+
|
|
155
|
+
`dataenginex.ai.tools.builtin`
|
|
156
|
+
|
|
157
|
+
Built-in agent tools: `sql_query`, `web_search`, `file_read`, `python_exec`, `vector_search`.
|
|
158
|
+
|
|
159
|
+
::: dataenginex.ai.tools.builtin
|
|
160
|
+
|
|
161
|
+
______________________________________________________________________
|
|
162
|
+
|
|
163
|
+
## Workflows
|
|
164
|
+
|
|
165
|
+
`dataenginex.ai.workflows.dag` — multi-step agent workflows as DAGs; steps branch, merge, and pass structured outputs
|
|
166
|
+
|
|
167
|
+
::: dataenginex.ai.workflows.dag
|
|
168
|
+
|
|
169
|
+
`dataenginex.ai.workflows.conditions` — conditional branching logic for DAG workflows
|
|
170
|
+
|
|
171
|
+
::: dataenginex.ai.workflows.conditions
|
|
172
|
+
|
|
173
|
+
`dataenginex.ai.workflows.human_loop` — pause a workflow at a step requiring human review or approval
|
|
174
|
+
|
|
175
|
+
::: dataenginex.ai.workflows.human_loop
|
|
176
|
+
|
|
177
|
+
______________________________________________________________________
|
|
178
|
+
|
|
179
|
+
## Observability
|
|
180
|
+
|
|
181
|
+
`dataenginex.ai.observability.audit` — logs every LLM request/response, tool call, and agent step for compliance
|
|
182
|
+
|
|
183
|
+
::: dataenginex.ai.observability.audit
|
|
184
|
+
|
|
185
|
+
`dataenginex.ai.observability.cost` — tracks token usage and estimated cost per provider, model, and agent run
|
|
186
|
+
|
|
187
|
+
::: dataenginex.ai.observability.cost
|
|
188
|
+
|
|
189
|
+
`dataenginex.ai.observability.metrics` — Prometheus metrics for LLM latency, token throughput, error rate
|
|
190
|
+
|
|
191
|
+
::: dataenginex.ai.observability.metrics
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# dataenginex.config
|
|
2
|
+
|
|
3
|
+
Config schema, loader, settings, and defaults. The `dex.yaml` file is parsed into a typed `DexConfig` object that drives the engine.
|
|
4
|
+
|
|
5
|
+
## Quick import
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from dataenginex.config import DexConfig, load_config, DexSettings
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
______________________________________________________________________
|
|
12
|
+
|
|
13
|
+
## Schema
|
|
14
|
+
|
|
15
|
+
`dataenginex.config.schema`
|
|
16
|
+
|
|
17
|
+
Pydantic models for `dex.yaml`. Covers pipelines, connectors, transforms, ML, AI, secops, and lakehouse config blocks.
|
|
18
|
+
|
|
19
|
+
::: dataenginex.config.schema
|
|
20
|
+
|
|
21
|
+
**Key model:** `DexConfig`
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
from dataenginex.config.schema import DexConfig
|
|
25
|
+
|
|
26
|
+
config = DexConfig.model_validate({
|
|
27
|
+
"pipelines": {
|
|
28
|
+
"ingest_events": {
|
|
29
|
+
"source": {"type": "csv", "path": "data/raw/events.csv"},
|
|
30
|
+
"destination": {"type": "parquet", "path": "data/bronze/events"},
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
______________________________________________________________________
|
|
37
|
+
|
|
38
|
+
## Loader
|
|
39
|
+
|
|
40
|
+
`dataenginex.config.loader`
|
|
41
|
+
|
|
42
|
+
Loads and validates `dex.yaml` (or a custom path) with environment variable interpolation and secret resolution.
|
|
43
|
+
|
|
44
|
+
::: dataenginex.config.loader
|
|
45
|
+
|
|
46
|
+
**Key function:** `load_config`
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
from dataenginex.config.loader import load_config
|
|
50
|
+
|
|
51
|
+
config = load_config("dex.yaml")
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
______________________________________________________________________
|
|
55
|
+
|
|
56
|
+
## Settings
|
|
57
|
+
|
|
58
|
+
`dataenginex.config.settings`
|
|
59
|
+
|
|
60
|
+
Runtime settings sourced from environment variables (`.env` or system env). Covers API keys, storage paths, log level, and feature flags.
|
|
61
|
+
|
|
62
|
+
::: dataenginex.config.settings
|
|
63
|
+
|
|
64
|
+
**Key class:** `DexSettings`
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
from dataenginex.config.settings import DexSettings
|
|
68
|
+
|
|
69
|
+
settings = DexSettings()
|
|
70
|
+
print(settings.log_level) # "INFO"
|
|
71
|
+
print(settings.dex_store_path) # ".dex/store.duckdb"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
See `.env.template` in the project root for all available settings.
|
|
75
|
+
|
|
76
|
+
______________________________________________________________________
|
|
77
|
+
|
|
78
|
+
## Defaults
|
|
79
|
+
|
|
80
|
+
`dataenginex.config.defaults`
|
|
81
|
+
|
|
82
|
+
Default values applied when config keys are omitted.
|
|
83
|
+
|
|
84
|
+
::: dataenginex.config.defaults
|