Catalog PyPI
PACKAGE EXPLORERView in registry

ai-data-platform

PyPI

AI Data Platform: metadata catalog, profiling, synthetic data generation, semantic models, NL-to-SQL, and MCP server — local-first.

data-catalogdata-qualityduckdbmcpmetadatapolarsprofilingsemantic-layersynthetic-data
Versions collected1
Direct dependencies31From release 0.3.1
Last observed21 Oct, 10:24 UTC

README

Version 0.3.1 documentation

Ai-data-platform

Why it matters

Data is the prerequisite for every analytics dashboard, ML model, pipeline test, and stakeholder demo — yet most teams spend weeks waiting for it. Production exports require compliance approval. Hand-crafted test files miss relationships and break at scale. POCs stall while access is negotiated.

ai-data-platform is a local-first tool that turns a schema declaration or a small sample into FK-safe, realistic synthetic data in minutes — with automated quality scoring, semantic models, SQL analytics, and AI-driven workflows. No cloud account. No PII exposure. Works in retail, healthcare, finance, and any other domain without custom code.

Without ADPWith ADP
Wait 2–6 weeks for production data accessGenerate 50k rows in under a minute
Hand-write fake CSVs that break FK integrityFK-safe, zero-orphan data at any volume
Rebuild test data after every schema changeRe-run apply-spec or scan → regenerate
Demo dashboards on empty tablesRealistic distributions from day one
Share production exports (PII risk)Synthetic data — no real PII leaves your machine

Acceleration timeline

PhaseTraditionalWith ai-data-platform
Get representative data2–6 weeks5–10 minutes
Validate data qualityManual spot-checksAutomated score + report
Build semantic layerWeeks of hand-written YAMLAuto-detected facts/dims/measures
Demo to stakeholdersEmpty charts or risky prod samplesRealistic KPIs on synthetic data
Onboard a new team member"Ask someone for the test dump"adp init && adp apply-spec && adp generate-data

Works in any domain — zero customization

There is no if domain == "healthcare" in the codebase. Retail orders, patient admissions, bank transactions, factory work orders, and telecom CDRs are all just tables, keys, categories, amounts, and dates.

DomainWhat you build fasterValidated example
Retail / E-commerceSales performance, YoY trends, category mixretail-ecommerce — 3 years of orders → Snowflake
HealthcarePatient analytics, admission workflows, compliance testinghealthcare-claims — 5+ tables, temporal/hierarchy
Finance / BankingRisk scoring, transaction monitoring, regulatory reportingFK-safe account → transaction chains
SaaS / CRMCustomer 360, churn models, sales pipelinesSame pattern as retail — connect CSV/DB samples and profile
Manufacturing / IoTSupply chain dashboards, work-order trackingParent-child BOM relationships
Any new verticalPOC before production access is grantedCold-start from spec.yaml — no sample data needed

End-to-end — what you get

One project, one flow, five tangible deliverables:

  YOUR INPUT                    ADP PIPELINE                      YOUR OUTPUT
  ──────────                    ────────────                      ───────────

  spec.yaml          ──▶  apply-spec  ──▶  catalog + profiles
  or CSV/DB sample   ──▶  scan/profile ──▶  learned distributions
                              │
                              ▼
                         generate-data
                              │
              ┌───────────────┼───────────────┐
              ▼               ▼               ▼
         output/         quality.md      semantic model
    (parquet/csv/      (score +          (Cube.js YAML
     duckdb files)      evidence)         for BI tools)
              │
              ▼
         explore / ui / sql
    (query, dashboard KPIs,
     natural-language analytics)
DeliverableWhat it isWho uses it
output/FK-safe synthetic tables (Parquet, CSV, DuckDB, or SQL)Engineers, QA, ML pipelines
quality.mdWeighted score (0–100) with per-check pass/fail evidenceQA, data engineers, compliance
Semantic modelAuto-detected facts, dimensions, measures → Cube.js YAMLBI developers, analytics teams
Data dictionaryMarkdown documentation of every table and columnOnboarding, documentation, audits
SQL analyticsQuery generated data in DuckDB; NL-to-SQL for business questionsAnalysts, product managers, demos

A complete example: A product manager describes a retail dataset → agent applies a spec → 50k rows generated → quality score 100/100 → revenue-by-city query returns realistic KPIs → stakeholder demo ready in one session. No production data touched.

Full walkthrough: docs/GETTING-STARTED.md


Who it's for

PersonaYour problemWhat you doWhat you get (in minutes)
Data engineerWeeks waiting for masked prod exportsconnect → scan → profile → generate-dataFK-safe test data at any volume, CI-reproducible with --seed 42
Product / solution architectCan't demo until prod access is approvedapply-spec spec.yaml → generate-dataWorking dataset from a design doc — no sample files needed
Analytics / BI developerDashboards built on empty or fake datagenerate-data → semantic-model → explore sqlRealistic data + Cube.js layer + queryable KPIs
QA / test engineerHand-crafted CSVs break FK integritygenerate-data → quality-checkScored report with 0 orphans guaranteed
ML engineerNot enough labeled data to train or evaluateprofile (learn shapes) → generate-data --rows 10000001M rows preserving statistical distributions
AI agent userAgent has nothing to work with in the IDEMCP: "generate 10k rows and run quality check"Full pipeline driven by natural language in Cursor/Claude
Consultant / SIEvery client engagement starts from zeroSame tool, swap spec.yaml per domainRetail Monday, healthcare Tuesday — no custom code

Not sure where to start?

If you are…Start hereTime
Non-technical / business userAsk your AI agent (Path C) or read USE-CASES.md3 min
Have a schema but no dataPath A — apply-spec5 min
Have CSV or database samplesPath B — connect → scan10 min
Want the full tutorialdocs/GETTING-STARTED.md15 min

How it works

Three ways in. Same pipeline. Same validated output.

flowchart TD
  subgraph paths [Choose your path]
    Q1{Have sample data?}
    Q1 -->|No| PathA["Path A: spec.yaml\napply-spec → generate"]
    Q1 -->|Yes| PathB["Path B: learn from data\nconnect → scan → profile → generate"]
    Q1 -->|AI IDE| PathC["Path C: MCP\nCursor / Claude / Windsurf"]
  end

  PathA --> Pipeline
  PathB --> Pipeline
  PathC --> Pipeline

  subgraph Pipeline [Generation pipeline]
    Gen[FK-safe generator]
    QC[quality-check]
    Gen --> QC
  end

  QC --> Out[output/ files]

  Out --> Next[semantic-model · explore sql · ui · docs]

Five steps, plain language:

StepWhat happensYou see
1. DefineDeclare your schema (spec.yaml) or connect your sample dataTables, columns, and relationships in the catalog
2. LearnEngine profiles distributions, detects keys, flags PIIStatistics per column — means, categories, null ratios
3. GenerateFK-safe synthetic data at any volume, seeded for reproducibilityFiles in output/ — one per table
4. ValidateAuto-derived quality checks run against your metadataScore out of 100 with per-check evidence
5. UseQuery with SQL, build semantic models, browse in UI, or drive from AIKPIs, dashboards, data dictionaries, insights

Full internals: docs/USER-FLOW.md · Architecture: docs/ARCHITECTURE.md


Get started

Install

pip install 'ai-data-platform[all]'      # everything (recommended)
pip install 'ai-data-platform[mcp]'       # MCP only (add to existing install)
pip install 'ai-data-platform[postgres]'  # PostgreSQL connector

Requires Python 3.11+.

Install via Homebrew (macOS)

brew tap yogi776/tap
brew install ai-data-platform

After installation adp is available everywhere in your terminal.

adp version        # verify
adp --help         # see all commands
adp mcp-server --help

Upgrade: brew upgrade ai-data-platform
Remove: brew uninstall ai-data-platform
Verify: which adp && adp version

The formula installs all optional extras ([all]), including MCP server support. Requires macOS (Apple Silicon or Intel) with Python 3.11+ via Homebrew's python@3.12. For full MCP client setup (Cursor, Claude Desktop, etc.), see the MCP Guide.

Troubleshooting: If adp is not found after install, start a new terminal session or run brew link --overwrite ai-data-platform. If the issue persists, add Homebrew's bin to your PATH:

echo 'export PATH="$(brew --prefix)/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc

Path A — no data needed (~5 min)

You have a design doc or schema in mind. No sample files required.

mkdir demo && cd demo
adp init --name demo
adp apply-spec path/to/spec.yaml       # see healthcare-claims (GitHub) or benchmarks/fixtures/
adp generate-data --rows 50000 --output parquet
adp quality-check --report quality.md
# Optional: push to Snowflake / BigQuery / Postgres (pip install 'ai-data-platform[load]')
# adp load --destination snowflake_dev

You get: output/*.parquet + quality.md with score 100/100. See docs/LOAD.md for warehouse export.

Path B — learn from sample data (~10 min)

You have CSV, Parquet, DuckDB, PostgreSQL, or MySQL samples.

mkdir demo && cd demo
adp init --name demo
adp connect --name my-db --type csv --path ./data
adp scan && adp profile
adp generate-data --rows 50000 --output parquet
adp quality-check

You get: Data that mirrors your sample's distributions, scaled to 50k rows.

Path C — drive from Cursor / Claude (~3 min)

pip install 'ai-data-platform[mcp]'
cd my-project && adp init && adp setup-agent

MCP works with any client (Claude, Cursor, Windsurf, VS Code). Cursor users also get auto-installed agent skills via adp init.

Add .cursor/mcp.json next to your adp.yaml (or use adp init to auto-write):

{"mcpServers": {"adp": {"command": "adp", "args": ["mcp-server"]}}}

Open the project folder as your workspace, reload MCP, then ask:

"Apply the healthcare spec and generate 10k rows. Run a quality check and show me the first 10 rows."

You get: Agent reports quality score, shows sample rows, files land in output/.

Runnable walkthrough with expected output at every step: docs/GETTING-STARTED.md

All 16 use cases: docs/USE-CASES.md


Key capabilities

CapabilityCLIMCP toolWhat it does
Declarative generationadp apply-specapply_specGenerate from spec.yaml — no sample data
Learn from samplesadp scan + adp profilescan_sources + profile_sourceDiscover schema and distributions
FK-safe generationadp generate-datagenerate_synthetic_dataSeeded, deterministic, zero orphans
Quality validationadp quality-checkrun_quality_checkWeighted score with per-check evidence
SQL analyticsadp explore sqlexecute_sqlQuery generated data in DuckDB
Semantic modelsadp semantic-modelcreate_semantic_modelAuto-detect facts, dims, measures → Cube.js YAML
Natural language SQLadp sqlgenerate_sqlNL → read-only SELECT (PII-safe)
Data dictionaryadp docsgenerate_docsMarkdown catalog documentation
Web consoleadp ui—Browse at http://127.0.0.1:8765
AI spec drafting—propose_specLLM drafts spec.yaml from plain language

One backend (ADPClient), four interfaces: CLI · SDK · Web UI · MCP. Same logic everywhere.

from ai_data_platform import ADPClient

client = ADPClient(".")
client.apply_spec("spec.yaml")
result = client.generate_data(rows=50_000, output_format="parquet")
print(client.quality_check()["quality_score"])   # → 100.0

Examples

One walkthrough project — retail-ecommerce: sales performance analysis with 3 years of order history, generate parquet, adp load to Snowflake, and ready-made KPI SQL.

For spec-only generation (no sample data), see healthcare-claims or benchmarks/fixtures/seasonal-retail-spec.yaml.


Configuration

Data sources (adp.yaml):

sources:
  - name: csv_files
    type: csv
    path: ./data
  - name: postgres_prod
    type: postgres
    dsn: "postgresql+psycopg://user:${PGPASSWORD}@host:5432/shop"
    schema: public

Secrets use ${ENV_VAR} interpolation — plaintext passwords are rejected.

AI provider (for NL-to-SQL and propose_spec):

model_provider:
  provider: minimax          # minimax | openai | anthropic | gemini | local
  api_key_env: MINIMAX_API_KEY

provider: local runs fully offline without LLM calls.

Declarative spec (spec.yaml) — see docs/SPEC-REFERENCE.md:

version: 1
tables:
  - name: dim_customer
    columns:
      - {name: customer_id, type: uuid, primary_key: true}
      - {name: gender, type: string, values: {Male: 48, Female: 50, Other: 2}}
      - {name: age, type: int, min: 18, max: 85}
      - {name: signup_date, type: date, start: 2020-01-01, end: 2026-01-01}

Documentation

GuideWhat it covers
docs/GETTING-STARTED.mdRunnable E2E walkthrough — Paths A, B, C, D with expected outputs
docs/USE-CASES.mdAll 16 use cases — goal, commands, example, expected outcome
docs/SPEC-REFERENCE.mdComplete spec.yaml language reference
docs/MCP-GUIDE.mdAll 25 MCP tools, agent flows, IDE setup
docs/AGENT-FLOW.mdGuided agent workflows (intake → KPI validation)
docs/USER-FLOW.mdStep-by-step internals for each CLI stage
docs/ARCHITECTURE.mdDesign principles, pipeline detail, extension points
LOCAL-SETUP.mdmacOS dev install and MCP setup

Benchmarks

Performance benchmarks are in benchmarks/bench_generation.py. Run them with Python 3.11+:

# Smoke test — 100K rows
python benchmarks/bench_generation.py --rows 100000

# Full benchmark — 10M rows per table (3 tables, 30M total rows)
python benchmarks/bench_generation.py \
  --rows 10000000 \
  --rows-per-table "fact_orders=10000000,fact_payments=10000000,fact_shipments=10000000"

Benchmark: Seasonal-Retail Spec · 10M rows/table · Parquet · 1 worker

Generated July 2026 on an 8-core machine.

MetricValue
Total rows30,000,000 (10M × 3 tables)
Wall time2 min 55 s
Throughput171,070 rows/s
Peak RSS2,004 MB
Output size2,355 MB (compressed Parquet)
Quality score100/100 ✓ (27/27 checks passed)
Seasonality score100/100 ✓ (4/4 checks passed)
Heuristic memory vs actual3,020 MB est vs 2,004 MB actual (−34%)

Per-table breakdown:

TableRowsOutputGen time
fact_orders10M552.8 MB~50s
fact_payments10M931.6 MB~53s
fact_shipments10M870.6 MB~53s

Bottleneck identified

The execution planner's complexity analyzer correctly flags GIL-bound Python string samplers as the thread-scaling ceiling:

⚠ fact_orders: 2 per-row Python string sampler(s) (order_id, order_ts_season)
  are GIL-bound and cap thread scaling at scale
  (Phase 3: vectorize).

uuid and seasonal_date samplers are the affected types — they construct strings per-row in Python. Vectorizing these (Phase 3 roadmap) is the single highest-leverage optimization for multi-worker throughput.

Memory model accuracy

The static memory estimator (heuristic) predicted 3,020 MB while actual peak RSS was 2,004 MB — a −34% overestimate. The OVERHEAD=2.0 factor in memory_estimator.py is conservative; the engine's chunked execution is more memory-efficient than modeled. The estimator correctly flagged the large-table risk but the real system handles it better than the static bound.

Scaling ladder (observed)

Rows/tableTotal rowsWall timeThroughputPeak RSS
100K300K1.2 s121K rows/s119 MB
10M30M175 s171K rows/s2,004 MB

Throughput scales from 121K → 171K rows/s as the system warms up (JIT, OS caches), confirming vectorized numeric generation is not the bottleneck at this scale.

Output format comparison

Seasonal-retail spec · 5M rows/table · 15M total rows · 1 worker · July 2026.

# Compare formats at 5M rows/table
python benchmarks/bench_generation.py \
  --rows 5000000 \
  --format csv \
  --rows-per-table "fact_orders=5000000,fact_payments=5000000,fact_shipments=5000000"

python benchmarks/bench_generation.py \
  --rows 5000000 \
  --format parquet \
  --rows-per-table "fact_orders=5000000,fact_payments=5000000,fact_shipments=5000000"

python benchmarks/bench_generation.py \
  --rows 5000000 \
  --format duckdb \
  --rows-per-table "fact_orders=5000000,fact_payments=5000000,fact_shipments=5000000"

Generation benchmark (5M rows/table)

FormatWall timeThroughputOutput sizeQuality score
CSV102.3 s146,656 rows/s1,859.7 MB100/100 ✓
Parquet110.2 s136,083 rows/s1,176.9 MB100/100 ✓
DuckDB145.7 s102,954 rows/s2,223.0 MBN/A*

* DuckDB writes a single generated.duckdb file; quality/seasonality checks currently expect CSV or Parquet on disk.

Micro-benchmark (1M rows · generate + read + aggregate)

FormatGenerateReadAggregateFile size
CSV12.7 s0.0 s0.1 s128 MB
Parquet12.0 s0.0 s0.1 s121 MB
DuckDB12.7 s0.1 s0.1 s74 MB

Recommendations

Use caseBest formatWhy
Fastest generationCSV~8% faster wall time; no columnar encoding overhead
Storage efficiencyParquet37% smaller than CSV; columnar + ZSTD compression
In-database analyticsDuckDBSmallest on-disk footprint; native SQL; zero-copy reads
ML / feature storesParquetIndustry standard; column pruning; cross-platform
Demo / CSV-first pipelinesCSVUniversal compatibility; fastest write path

Product & pricing

Commercial packaging and roadmap (draft):


Development

git clone git@github.com:Yogi776/data-generation-sdk.git
cd data-generation-sdk
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev,all]"

pytest && ruff check . && mypy src

License

Apache-2.0 — see LICENSE.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.3.111 Jul 202631

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
yogi776/data-generation-sdk

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 10:24 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:75683b0a9ccc01ff02c8c8cbe4d9e207c7f399a1939daca2bbf9709647aff9b6