[Unreleased] - 2026-03-06
Added
-
Simple simulation endpoint:
POST /api/v1/simple/simulations— submit a collective-operation workload (AllReduce, Broadcast, etc.) with a single request. The platform handles topology derivation, traceset synthesis, and simulation launch automatically. -
Topology constraints:
topologyConstraintsobject onSimpleSimulationRequestwithswitchRadix(enum:64x800G,128x400G,256x200G) andsubscriptionRatio(enum:1:1,2:1,3:1,4:1). Enables arbitrary rank counts by deriving a valid 2-tier CLOS topology from hardware constraints.
Fixed
- Simulation results endpoints: Removed non-functional workspace ownership check that blocked all users from accessing results.
DefaultWorkspace.owner = 'system'causedverify_workspace_accessto reject every real user. Endpoints now correctly return results for any authenticated user. Affected:GET /simulations/{id}/results,GET /simulations/{id}/results/download-url,GET /simulations/{id}/results/data.
Changed
-
Presigned URL expiry reduced: Simulation result download URLs (
GET /simulations/{id}/resultsandGET /simulations/{id}/results/download-url) now expire after 15 minutes (900 s) instead of the previous 60 minutes (3600 s). This is a defense-in-depth hardening to limit exposure if a URL leaks. Clients that fetch a presigned URL and consume it after a delay greater than 15 minutes will receive an HTTP 403 from S3. TheexpiresAtfield in thedownload-urlresponse reflects the actual expiry. No known consumers cache presigned URLs beyond this window. -
BREAKING:
SimpleWorkload.rankschanged from integer enum ([64, 128, 256, 512, 1024, 4096]) tointegerwithminimum: 1. WithouttopologyConstraints, the server still restricts to the 6 reference values. WithtopologyConstraints, any positive value satisfying the constraint solver is accepted. -
BREAKING:
TracesetFilerenamed toFileResponsein the Python client. Adds required fieldmetadata_status. Update imports:from python_client.models import FileResponse(wasTracesetFile). -
BREAKING:
ContainerDefinition.type_andAllowedTypesResponse.container_typenow useContainerTypeinstead ofComponentTypein the Python client. Both arestrenums with identical string values, so equality comparisons by value still work. Updateisinstancechecks if used. -
BREAKING:
DlrmMetadata,TraceMetadata, andTraceMetadataWorkloadTyperemoved from the Python client. These types are no longer part of the API surface. Remove any imports that reference them. -
Traceset listing scope widened:
GET /api/v1/tracesets?workspaceId=Xnow returns all non-deleted tracesets visible to the workspace, including promoted tracesets with scopetenantorpublic. Previously, onlyworkspace-scoped tracesets were returned. This ensures promoted tracesets remain visible after promotion. -
TrafficType output consolidation: API responses now return
"chakra"where"coordinated"was previously emitted for thetrafficTypefield. Input is backward-compatible: both"chakra"and"coordinated"are accepted via serde alias. This reflects the A5 schema migration consolidating Coordinated into Chakra. -
BREAKING:
PATCH /api/v1/configurations/{config_id}/tracesetnow requires the traceset’s metadata extraction to be complete before attaching. The endpoint previously accepted any valid traceset regardless of library state; it now enforces thatrank_countis resolved and positive (required to populateNumOfChakraFilesin the Chakra workload model). Two new error responses are returned when the traceset metadata is incomplete or invalid:Migration: If you call this endpoint immediately after uploading a traceset, poll until the traceset’smetadataStatusiscompletebefore attaching. A409response indicates the traceset is not yet ready; retry after a short backoff. A422response indicates a permanent problem with the traceset metadata and will not resolve on retry.
[Previous Unreleased] - 2024-12-23
Changed
-
BREAKING:
Pagination.limitrenamed toPagination.countin API responses- Affected: All paginated list endpoints
- Before:
{"limit": 10, "hasMore": true, "cursor": "..."} - After:
{"count": 10, "hasMore": true, "cursor": "..."} - Semantic change:
countrepresents the actual number of items returned (may be less than requested limit) - Note: Query parameter
?limit=Nremains unchanged; only the response field name changed - Migration: Update client code to read
countinstead oflimitfrom pagination responses
-
BREAKING:
ParameterDefinition.defaulttype changed from JSON value to string- Affected:
GET /api/v1/models/{id},GET /api/v1/components/{id} - Before:
{"default": 100}or{"default": true} - After:
{"default": "100"}or{"default": "true"} - Migration: Parse the string value according to the parameter’s
typefield
- Affected:
-
BREAKING:
ComponentDeclaration.modelformat changed to use standardized model reference- Affected:
GET /api/v1/templates/{id},GET /api/v1/configurations/{id},GET /api/v1/configurations/{id}/versions/{v},POST /api/v1/templates/{id}/clone - Before:
{"model": "ScalaSwitch:3.2.1", "name": "spine-1"}(model in internal format, name user-defined) - After:
{"model": "scala-switch-v3.2.1", "name": "spine-1"}(model standardized to API format, name remains user-manageable) - Format: Model field is standardized to API format (
scala-switch-v{version}) - Name field: Remains user-manageable and unchanged from input
- Benefit: Model field can be parsed to extract model reference for use with
GET /api/v1/models/{model_id} - Migration: Update any code that parses or displays component model fields
- Affected:
-
BREAKING: Only referenced components are returned in configuration responses
- Affected:
GET /api/v1/templates/{id},GET /api/v1/configurations/{id},POST /api/v1/templates/{id}/clone - Before: All components declared in the configuration were returned, including unused ones
- After: Only components referenced in
topology.components,topology.containers, orcontainers[].componentsare returned - Rationale: Reduces response size and focuses on components actually used in the topology
- Migration: If your code relies on seeing all declared components, use the stored configuration data directly
- Affected:
-
Template cloning preserves original data format
- Affected:
POST /api/v1/templates/{id}/clone - Change: Cloned configurations now preserve the original template’s data format (legacy or new format)
- Before: Template data was transformed to new format during cloning
- After: Template data format is preserved, only metadata fields (version, workspaceId, name, status, parent_config_id) are updated
- Benefit: Maintains compatibility with existing templates and allows format-specific handling
- Affected:
Removed
- BREAKING: Removed fields from
ParameterDefinition:componentType- was used for nested component type referencesmodel- was used for model references within parametersparameters- was used for nested parameter definitions- Migration: These fields were not widely used. If you relied on nested parameter structures, contact the API team for migration guidance.
Added
-
Model Metadata Enrichment: Templates API now fetches model metadata from
model_version- Affected:
GET /api/v1/templates/{id} - Components are enriched with parameter schemas and type information from the database
- When a component references a model (e.g.,
ScalaSwitch:4.0.0), the API looks up the model inmodel_versionand includes the full parameter schema - Benefit: Clients receive complete model metadata without needing separate API calls to
/api/v1/models/{model_id}
- Affected:
-
Parameter Extraction: Extended parameter extraction to include coordinator-level parameters
- Application models now expose parameters from
Coordinators,ModelProfiles, andTrafficPatternsections - Parameters include group information (e.g.,
Delay.CoordinatorAttributes)
- Application models now expose parameters from