Sealed Recipes
Sealed recipes are platform-owned compute primitives. Each recipe has a fixed runtime, a fixed entrypoint, and a typed payload schema. You submit payloads — Computalot handles everything else.
Use a sealed recipe when you want to evaluate, train, fuzz, or optimize against a platform-provided runtime without uploading your own code.
Use a project when you need to bring your own code, dependencies, or custom commands.
How to Use Recipes
1. Discover recipes
# List all recipes
curl -sS "$BASE_URL/api/v1/recipes" -H "Authorization: Bearer $TOKEN"
# Inspect one recipe's schema and operations
curl -sS "$BASE_URL/api/v1/recipes/packing" -H "Authorization: Bearer $TOKEN"2. Submit a recipe job
You can use either public submit path:
- route-specific:
POST /api/v1/recipes/:name/jobs - generic:
POST /api/v1/jobswith"recipe": "<name>"
curl -sS "$BASE_URL/api/v1/recipes/packing/jobs" \
-X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"payload": {
"operation": "eval",
"candidate": [0.12, 0.31, 0.88, 0.45, 0.67, 0.23, 0.91, 0.14, 0.56, 0.78, 0.33, 0.62, 0.85, 0.19, 0.44, 0.71, 0.28, 0.93, 0.16, 0.59, 0.82, 0.37, 0.65, 0.11, 0.48, 0.74, 0.26, 0.89, 0.52, 0.18, 0.69, 0.41, 0.95, 0.32, 0.76, 0.22, 0.58, 0.84, 0.13, 0.47, 0.73, 0.39, 0.66, 0.21, 0.87]
},
"timeout_s": 300
}'Generic equivalent:
curl -sS "$BASE_URL/api/v1/jobs" \
-X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"recipe": "packing",
"payload": {
"operation": "eval",
"candidate": [0.12, 0.31, 0.88, 0.45, 0.67, 0.23, 0.91, 0.14, 0.56, 0.78, 0.33, 0.62, 0.85, 0.19, 0.44, 0.71, 0.28, 0.93, 0.16, 0.59, 0.82, 0.37, 0.65, 0.11, 0.48, 0.74, 0.26, 0.89, 0.52, 0.18, 0.69, 0.41, 0.95, 0.32, 0.76, 0.22, 0.58, 0.84, 0.13, 0.47, 0.73, 0.39, 0.66, 0.21, 0.87]
},
"timeout_s": 300
}'Recipe jobs use the normal job lifecycle. You do not set type or runner_command — the recipe provides both. If a submit fails with 422, inspect GET /api/v1/recipes/:name and retry with the documented operation, payload fields, and artifact references.
3. Read results
curl -sS "$BASE_URL/api/v1/results/<job_id>" -H "Authorization: Bearer $TOKEN"Recipe Catalog
| Recipe | Description | Operations |
|---|---|---|
| Prop AMM | Compile and evaluate Rust strategies against the AMM evaluator | eval, validate, build, and more |
| Simple AMM | Compile and evaluate Solidity strategies against the simple_amm evaluator | build, validate, eval, eval_chunk |
| Packing | Score semicircle packing candidates against the geometry scorer | eval, eval_batch, feasible_optimize, and more |
| LightGBM Train | Train or cross-validate LightGBM models on tabular datasets | train, cross_validate |
| Echidna | Smart contract fuzzing with Echidna | foundry_prebuilt, hardhat_prebuilt |
What You Control
- Payload values (typed by the recipe’s schema)
- Artifact IDs for supported inputs
timeout_srequirements(optional)reservation(optional)
What You Don’t Control
runner_command(fixed by the recipe)- Runtime contents and entrypoint
- Cache policy
- Ad-hoc dependency installation
Current Support Truth
All currently public recipes are shared CPU recipes.
supported_placement_policies = ["shared"]default_requirements.profile = "cpu"
No current public recipe supports dedicated placement or GPU.
Artifact Inputs By Recipe
| Recipe | Artifact inputs | Placement / hardware |
|---|---|---|
| Prop AMM | strategy_ref | shared CPU |
| Simple AMM | strategy_ref | shared CPU |
| Packing | candidate_ref, candidates_ref | shared CPU |
| LightGBM Train | dataset_ref | shared CPU |
| Echidna | project_ref | shared CPU |
API Endpoints
| Method | Path | Purpose |
|---|---|---|
GET | /api/v1/recipes | List all public recipes |
GET | /api/v1/recipes/:name | Recipe schema and operations |
POST | /api/v1/recipes/:name/jobs | Submit a recipe job |
GET | /api/v1/docs/recipes | Recipe documentation |