Buckets:
22.6 GB
50,627 files
Updated 25 days ago
Ctrl+K
| Name | Size | Uploaded | Xet hash |
|---|---|---|---|
| functions | 10 items | ||
| public | 2 items | ||
| src | 2 items | ||
| .dev.vars.example | 228 Bytes xet | 4ec6e6de | |
| .gitignore | 24 Bytes xet | 399e4a15 | |
| README.md | 3.25 kB xet | ed820831 | |
| index.html | 313 Bytes xet | f6a102d4 | |
| package-lock.json | 108 kB xet | a8fd5712 | |
| package.json | 686 Bytes xet | ad060b9a | |
| tsconfig.json | 504 Bytes xet | 282a5641 | |
| vite.config.ts | 169 Bytes xet | 1ea866c4 |
HD-BasinFlow Web MVP
This is the first product-facing web app for HD-BasinFlow.
It is intentionally scoped to the strongest current evidence:
- binary text classification
- DistilBERT-style fine-tuning
- fixed-budget hyperparameter search
- A100-backed job queue
- report-first delivery
It should not be marketed as broad AutoML, image optimization, or a universal Optuna replacement.
Run Locally
cd web
npm install
npm run dev
Open the Vite URL printed by the command.
For the Cloudflare Pages API routes as well as the Vite frontend:
cp .dev.vars.example .dev.vars
# Fill .dev.vars after Supabase and Stripe are created.
npm run pages:dev
Public deploy target:
npm run pages:deploy
Cloudflare Pages settings:
- Project name:
hdbasin - Production URL:
https://hdbasin.pages.dev - Build command:
npm run build - Build output directory:
dist - Root directory:
web
Intended Production Flow
- User uploads a CSV or JSONL dataset.
- The API validates that the selected label column has exactly two classes.
- User chooses a fixed budget: 8, 12, or 20 trials.
- Stripe checkout creates a paid run reservation.
- A job record is inserted into the queue.
- The A100 worker downloads the private dataset and runs HD-BasinFlow.
- The worker writes the report, plots, best config, and optional checkpoint.
- The user downloads the report from the dashboard.
Backend Endpoints To Add
POST /api/uploads/presign
POST /api/datasets/validate
POST /api/checkout/session
POST /api/jobs
GET /api/jobs/:id
GET /api/jobs/:id/events
GET /api/jobs/:id/report
POST /api/jobs/:id/cancel
Implemented now:
GET /api/health
POST /api/uploads/presign
POST /api/datasets/validate
POST /api/checkout/session
POST /api/demo/session
POST /api/stripe/webhook
GET /api/jobs/:id
GET /api/jobs/:id/events
POST /api/jobs/:id/cancel
The public page also includes a Sample button plus Run free demo, which creates a zero-cost queued job without Stripe.
A100 Worker Contract
The web app should enqueue a job payload like:
{
"jobId": "job_123",
"datasetUri": "s3://private-bucket/job_123/input.csv",
"textColumn": "text",
"labelColumn": "label",
"modelFamily": "distilbert",
"budget": 20,
"optimizer": "hdbasinflow",
"taskType": "binary_text_classification"
}
The worker should return:
{
"jobId": "job_123",
"status": "succeeded",
"bestValidationLoss": 0.6598,
"bestConfigUri": "s3://private-bucket/job_123/best_config.json",
"reportUri": "s3://private-bucket/job_123/report.pdf",
"plotsUri": "s3://private-bucket/job_123/plots.zip"
}
Payment Notes
Use Stripe Checkout first. Do not run the GPU job until the checkout session is paid and the webhook marks the job as funded.
Minimum webhook events:
checkout.session.completedcheckout.session.expiredpayment_intent.payment_failed
Safety Limits
- Reject datasets above the configured size limit.
- Reject multiclass labels in the first public version.
- Store uploads privately.
- Delete raw uploads after a fixed retention window.
- Cap job runtime and GPU memory.
- Return an honest report even when HD-BasinFlow loses to the baseline.
- Total size
- 22.6 GB
- Files
- 50,627
- Last updated
- Jul 21
- Pre-warmed CDN
- US EU US EU