Skip to main content

Profiles

A Profile stores task parameters whose actual values are frozen on submission. An inline Profile is a dictionary in an SDK submission; a named Profile is a parameter template with a name and version in the platform's local registry. A Profile is not a Trial and does not store credentials.

Inline parameters​

from envloop import Client

with Client.remote() as client:
trial = client.tasks.submit("./my-task", profile={"seed": 42})
print(trial["trial_id"])

The Task entrypoint reads JSON from ENVLOOP_TASK_PROFILE:

import json
import os

profile = json.loads(os.environ.get("ENVLOOP_TASK_PROFILE", "{}"))
print(profile.get("seed"))

The Task interprets parameters; passing a seed does not automatically make scripts, models, or environments deterministic. A profile dictionary differs from a complete ProfileSpec.

Local named profiles​

EnvPlatform must be installed. Run the following at the top level of your dataset Git repository; the example assumes el is installed in the current shell and the repository has a local main branch. Prepare a Git repository first if necessary; avoid accidentally creating a data registry in the SDK installation directory.

unset ENVLOOP_BASE_URL ENVPLATFORM_API_URL
el --repository-root . profile init
cat > spec.json <<'JSON'
{
"schema_version": "envplatform.profile/v1",
"name": "examples/local",
"version": "1",
"params": {"seed": 42, "execution": {"timeout_sec": 60}}
}
JSON
el --repository-root . profile put examples/local 1 --file spec.json
el --repository-root . profile get examples/local --version 1
el --repository-root . task submit ./my-task --profile examples/local@1

my-task contains only the task's two files; keep spec.json outside that directory. Profile management does not read the address from .env.local and has no HTTP write endpoint. When a remote submission references a named Profile, that Profile must already exist in the server registry, not a local client file.

Defaults and snapshots​

el --repository-root . profile set-default examples/local 1
el --repository-root . profile list --name examples/local
el --repository-root . profile export examples/local 1 > exported-profile.json

Omitting the version requires an explicit default; latest is not guessed. If a default already exists, use --expected-version OLD_VERSION for concurrency checks. --profile-sha256 checks the normalized ProfileSpec hash; --seed can override the run seed.

When commit is omitted, the repository binds a fixed snapshot of local main, not the current working branch HEAD, and does not automatically fetch the remote. If main is absent or a different snapshot is needed, explicitly pass the full commit:

el --repository-root . --repository-commit "$(git rev-parse HEAD)" \
task submit ./my-task --profile examples/local@1

A new Client bound to the same repository can read completed receipts; running tasks do not recover across processes. See Reference for SDK methods.