Synthetic Data Studio. The Foundry app that feeds the other Foundry apps — it answers "where do I get labeled data to benchmark, evaluate, and ground with?" by generating real synthetic datasets through the live Nyquest relay, then validating every record with deterministic code — the model generates, the code checks.
Live at dataforge.zoidlab.ai. Part of the ZoidLab Foundry. Requires Nyquest Pro (enforced on both the frontend gate and every backend data endpoint, fail-closed).
- Generators — a spec for the data you want: a
kind, a schema, a style, a domain, and a default count. Three kinds:- classification —
{text, label}wherelabelis constrained to a label set. - qa —
{question, answer}reference pairs. - structured — rows matching a column schema (
string|number|integer|boolean|date).
- classification —
- Real generation — one synchronous relay call producing a JSON array of records (temperature 0.4, count capped at 100). Latency is wall-clock measured; tokens come from the relay's usage.
- Deterministic validation — labels must be in the set, required columns present, types
checked in plain Python. Each record carries a
validflag and per-record errors — never a model grading its own output. - Export where it's needed — datasets export as a signed Foundry envelope, plus convenience
shapes that drop straight into:
- ModelBench datasets (
prompt+expected) — classification & QA, - Eval test sets (
input+expected/reference) — all kinds, - RAG QA sets (
question/answerpairs) — QA. Only records that passed validation are placed in the downstream shapes.
- ModelBench datasets (
- Every record comes from a real relay call — nothing is templated or simulated. Seeds contain generator definitions only, never generated records (no dataset is seeded).
- Validation is code, not vibes: a record is
validonly if it matches the requested schema/labels. cost_usdis stored only when the relay reports it in usage; it is never invented from a local price table (it shows—otherwise).- If no relay key is configured,
/api/generatereturns503 relay_unavailable— it never fabricates output.
- Backend: FastAPI on the shared foundry-common platform layer —
auth.py,entitlements.py,envelope.py,llm.pyare thin shims;db_pg.pyusesfoundry_common.db(Postgres pool + per-tenant Row-Level Security ongenerators/datasets). - Frontend: Next.js 15 + React 19 + Tailwind. Shared
zb_sessionSSO + reusable Pro gate (Next middleware,<FoundryAccessGate>, and backendrequire_pro— three layers, fail-closed). - Deploy (zoidberg):
dataforge-api(:8709) +dataforge-web(:3709) behind the Cloudflare tunnel atdataforge.zoidlab.ai.
cd backend && python -m venv .venv && .venv/bin/pip install -r requirements.txt
NYQUEST_API_KEY=... .venv/bin/uvicorn main:app --port 8709
cd ../frontend && npm install && npm run dev # proxies /api → 127.0.0.1:8709Requires the shared Foundry Postgres (RLS roles foundry / app_rls) — point DATABASE_URL
and DATABASE_URL_ADMIN at a dataforge database. Set MOCK_PRO_USER=true for local dev
without a Nyquest session.