V2.18.0
CLI
- New: Run jobs and services without a Polyaxonfile using
polyaxon runwith--image,--cmd,--env,--cpu,--memory,--gpu, and--port/--ports. - New: Start sandbox services with
polyaxon run --sandbox, using inline options, a Polyaxonfile without a runtime (for example onlyplugins), or an existing service Polyaxonfile. - New: Pass the same inline options as keyword arguments to
RunClient.create,create_from_polyaxonfile,create_from_url,create_from_hub, andSandboxClient.create, sync and async:image,cmd,env,cpu,memory,gpu, andports. - New: Add
--strict-paramsand--no-strict-paramstopolyaxon runandpolyaxon check, andstrict_paramstocheck_polyaxonfile. These set the operation policy without relaxing a strict component or changing preset precedence. - Enhancement: Warn when a Polyaxonfile supplies
version. The field is now optional and no longer selects a validation schema. - Fix: Issue with Kubernetes Python client 37 breaks Polyaxonfile validation with strict Pydantic models.
- Fix:
SandboxClient.create()without content builds the same service aspolyaxon run --sandboxand leavestmuxandsshunset, so presets can enable them. Older servers rejected its request with "The Polyaxonfileversionmust be specified". - Fix: Send string params passed to the Python SDK as given, like
-Pvalues. They were read as Python literals before the declared types were known, so"1e3"for astrinput arrived as"1000.0"and JSON text as a dict. See Compatibility.
Core
- New: Add root execution shortcuts to Polyaxonfiles, including
container,cmd,env,resources,ports,environment,init,connections,sidecars, andvolumes. - Enhancement: Accept undeclared params as context values by default, with or without declared IO. Add
strictParamsto components and operations for opt-in undeclared-name validation. - Enhancement: Accept components, operations, and compiled operations without
version. Preserve supplied values through parsing, compilation, and run storage. - Fix: Record resolved context params alongside declared inputs in
Run.inputs, including runs with no declared inputs. Declared outputs keep their existing recording behavior. - Fix: Handle null-valued params serialized as empty dictionaries without failing scheduler compilation with
Cannot read config_value: {}. - Fix: Retain
strictParamson control-plane workflow parents for child validation, but omit it from resolved specs sent to agents for backward compatibility. - Fix: Keep Ray
rayStartParamsvalues as strings during compilation. Values that look like numbers, such asnum-cpus: "0", failed run compilation. - Fix: Keep items in container
commandandargslists as written. Values that looked like Python literals were rewritten, and0,0.0andFalse, including templated params, were dropped. - Fix: Keep values and options of text-typed inputs and outputs (
str,path,image,uuid,List[str], orisListwith those types) as written during compilation. Values that looked like Python literals were converted, such as"0"to0,List[str]values with numeric-looking items failed compilation, and escaped Jinja was erased. - Fix: Random search over boolean
choicevalues created runs withNoneinstead oftrue/false.
Operator
- Fix: Record job status changes that only appear on the pod, such as recovering from a startup warning to
Running. Job pod events were mapped to a resource name that does not exist and were ignored. - Fix: Report service pod warnings, such as
ImagePullBackOff, within seconds instead of after the Deployment progress deadline (10 minutes by default). - Fix: Map Dask scheduler and worker pod events to their cluster. Dask pods are owned by Deployments, so their events were ignored.
- Fix: Fail operations whose container image name can't be parsed (
InvalidImageName). Kubernetes never fails these pods, so runs stayed inWarningwithContainersNotReadyuntil stopped. - Fix: Report image pull retries as
ImagePullBackOff. The status alternated withContainersNotReadyand hid the registry error. - Fix: Report jobs as
Runningonly once the main container starts. A job whose pod was still pending was recorded as running. - Fix: Handle culling for services that have no status condition yet. The reconcile panicked and was retried until a condition was recorded.
- Fix: Respect
falseand0in operator boolean settings that default to enabled, such asPOLYAXON_SET_AGENT. They were ignored. - Fix: Refresh condition messages while the reason stays the same. A warning kept the first message Kubernetes reported, such as an empty
containers with unready status:list. - Fix: Record the time of each operator status condition. Every condition in a run's status history showed the time of the first one.
- Fix: Report the main container's failure reason, such as
OOMKilledorError, for jobs that exhaust their retries instead ofBackoffLimitExceeded. - Fix: Report Dask clusters that can't create their scheduler or worker pods, for example over quota, as
Warningwith the Kubernetes error instead ofRunning. - Fix: Report Dask clusters as
Runningonly once the scheduler starts. The Dask operator reportsRunningas soon as the scheduler Service exists. - Fix: Report Dask scheduler pod warnings, such as
ImagePullBackOff, while the scheduler is not running. The cluster stayedStartingwithout a reason. - Fix: Enforce
termination.timeoutfor Dask and Ray cluster runs. The operator ignored it. - Fix: Cull and complete services that set
termination.timeout. Culling and main container exits could be skipped while the service was within its timeout. - Enhancement: Stop caching Kubernetes Events and remove unused field indexes and pod watches. The operator no longer needs
get,listandwatchpermissions on events.
Deployment
- Fix: Enable only the TFJob, PyTorchJob and MPIJob schemes in the training operator chart. The training operator crash-looped because it enabled every scheme, including ones whose CRDs the chart no longer installs.
UI
- Enhancement: Improve auto-rendering of inputs/outputs in tables.
Commercial
- Fix: Return
404for malformed integration UUIDs on commercial endpoints, including agent endpoints, instead of failing during request handling.
Compatibility
Undeclared param names, including typos, are now accepted by default. Set strictParams: true to retain undeclared-name checks. In strict mode, explicitly allow extra context values with contextOnly: true. An explicit contextOnly: false requires a matching IO declaration in either mode. Declared IO types, constraints, and required-value validation still apply.
Use CLI and server versions that support the 2.18 policy and compatible SDKs when submitting strictParams. Older CLI and server validators may reject the new field or undeclared params.
Agents do not need to support strictParams; the control plane resolves it before dispatch.
Python SDK params are sent as given: strings are no longer read as Python literals. Declared input and output types still convert them during compilation, for example "0" for an int input becomes 0. Pass native values where you relied on the old reading:
- An untyped
"0"stays a string until IO parsing, so operation conditions such as{{ n == 0 }}are false. - Nested strings such as
{"k": "0"}no longer match numeric options ofdictorlistinputs. - Python-repr strings such as
"{'a': 1}"fail validation. JSON strings and native dicts work. - A JSON-string dict replaces a dict param from the Polyaxonfile instead of merging into it. Native dicts still merge.
Text-typed inputs and outputs keep None as the text "None", including value: None in YAML, -P x=None, and templates rendering a null value. Use YAML null, omit the param, or pass None from the SDK.
Older CLI and server versions require version: 1.1. Keep it when targeting those versions. V2.18 accepts versioned and versionless Polyaxonfiles. This includes SandboxClient.create(): on older servers, pass content with version: 1.1.
See the params reference for examples and component/operation precedence.