Edge Impulse Optimization API

The Optimization API from Edge Impulse — 15 operation(s) for optimization.

OpenAPI Specification

edge-impulse-optimization-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Edge Impulse Optimization API
  version: 1.0.0
servers:
- url: https://studio.edgeimpulse.com/v1
security:
- ApiKeyAuthentication: []
- JWTAuthentication: []
- JWTHttpHeaderAuthentication: []
tags:
- name: Optimization
paths:
  /api/{projectId}/optimize/runs:
    get:
      summary: List all tuner runs
      description: List all the tuner runs for a project.
      operationId: listTunerRuns
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListTunerRunsResponse'
  /api/{projectId}/optimize/config:
    get:
      summary: Get config
      description: Get config
      operationId: getConfig
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptimizeConfigResponse'
    post:
      summary: Update config
      description: Update config
      operationId: updateConfig
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OptimizeConfig'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericApiResponse'
  /api/{projectId}/optimize/all-learn-blocks:
    get:
      summary: Get all available learn blocks
      description: Get all available learn blocks
      operationId: getAllLearnBlocks
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllLearnBlocksResponse'
  /api/{projectId}/optimize/window-settings:
    get:
      summary: Get window settings
      description: Get window settings
      operationId: getWindowSettings
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WindowSettingsResponse'
  /api/{projectId}/optimize/score-trial:
    post:
      summary: Score trial
      description: Score trial
      operationId: scoreTrial
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TunerCreateTrialImpulse'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScoreTrialResponse'
  /api/{projectId}/optimize/{jobId}/create-trial:
    post:
      summary: Create trial
      description: Create trial
      operationId: createTrial
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/JobIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TunerCreateTrialImpulse'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericApiResponse'
  /api/{projectId}/optimize/{jobId}/complete-search:
    post:
      summary: Complete EON tuner run
      description: Complete EON tuner run and mark it as succesful
      operationId: completeSearch
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/JobIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TunerCompleteSearch'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericApiResponse'
  /api/{projectId}/optimize/space:
    get:
      summary: Search space
      description: Search space
      operationId: getSpace
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptimizeSpaceResponse'
  /api/{projectId}/optimize/state:
    get:
      summary: Retrieves the EON tuner state
      description: Retrieves the EON tuner state
      operationId: getState
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: Current EON tuner state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptimizeStateResponse'
    delete:
      summary: Delete EON tuner state
      description: Completely clears the EON tuner state for this project.
      operationId: deleteState
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericApiResponse'
  /api/{projectId}/optimize/dsp-parameters:
    get:
      summary: Retrieves DSP block parameters
      description: Retrieves DSP block parameters
      operationId: getDspParameters
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/OptimizeOrganizationIdParameter'
      - $ref: '#/components/parameters/OptimizeOrganizationDspIdParameter'
      responses:
        '200':
          description: DSP parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptimizeDSPParametersResponse'
  /api/{projectId}/optimize/transfer-learning-models:
    get:
      summary: Retrieves available transfer learning models
      description: Retrieves available transfer learning models
      operationId: getTransferLearningModels
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      responses:
        '200':
          description: Block info
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptimizeTransferLearningModelsResponse'
  /api/{projectId}/optimize/trial/{trialId}/stdout:
    get:
      summary: Get trial logs
      description: Get the logs for a trial.
      operationId: getTrialLogs
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/TrialIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogStdoutResponse'
  /api/{projectId}/optimize//{jobId}/trial/{trialId}/end-trial:
    get:
      summary: End EON tuner trial
      description: End an EON trial early. This can for example be used to implement early stopping.
      operationId: endTrial
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/JobIdParameter'
      - $ref: '#/components/parameters/TrialIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericApiResponse'
  /api/{projectId}/optimize/{tunerCoordinatorJobId}/state:
    get:
      summary: Retrieves EON tuner state for a run.
      description: Retrieves the EON tuner state for a specific run.
      operationId: getTunerRunState
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/TunerCoordinatorJobIdParameter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OptimizeStateResponse'
  /api/{projectId}/optimize/{tunerCoordinatorJobId}:
    post:
      summary: Update EON tuner state
      description: Updates the EON tuner state for a specific run.
      operationId: updateTunerRun
      tags:
      - Optimization
      parameters:
      - $ref: '#/components/parameters/ProjectIdParameter'
      - $ref: '#/components/parameters/TunerCoordinatorJobIdParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateTunerRunRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericApiResponse'
components:
  schemas:
    LogStdoutResponse:
      allOf:
      - $ref: '#/components/schemas/GenericApiResponse'
      - type: object
        required:
        - stdout
        - totalCount
        properties:
          stdout:
            type: array
            items:
              type: object
              required:
              - created
              - data
              properties:
                created:
                  type: string
                  format: date-time
                data:
                  type: string
                logLevel:
                  type: string
                  enum:
                  - error
                  - warn
                  - info
                  - debug
          totalCount:
            type: integer
            description: Total number of logs (only the last 1000 lines are returned)
    BlockDisplayCategory:
      description: Category to display this block in the UI.
      type: string
      enum:
      - classical
      - tao
    UpdateTunerRunRequest:
      type: object
      properties:
        name:
          type: string
    ListTunerRunsResponse:
      allOf:
      - $ref: '#/components/schemas/GenericApiResponse'
      - type: object
        required:
        - runs
        properties:
          runs:
            type: array
            items:
              $ref: '#/components/schemas/TunerRun'
    BlockType:
      type: string
      enum:
      - official
      - personal
      - enterprise
      - pro-or-enterprise
      - community
    TunerCompleteSearch:
      type: object
      required:
      - success
      properties:
        success:
          type: boolean
    ScoreTrialResponse:
      allOf:
      - $ref: '#/components/schemas/GenericApiResponse'
      - type: object
        required:
        - latency
        - ram
        - rom
        - score
        properties:
          score:
            type: number
          latency:
            type: object
            required:
            - dspMips
            - dspMs
            - learnMaccs
            - learnMs
            properties:
              dspMips:
                type: number
              dspMs:
                type: number
              learnMaccs:
                type: number
              learnMs:
                type: number
          ram:
            type: object
            required:
            - dsp
            - learn
            properties:
              dsp:
                type: number
              learn:
                type: number
          rom:
            type: object
            required:
            - dsp
            - learn
            properties:
              dsp:
                type: number
              learn:
                type: number
    OptimizeDSPParametersResponse:
      allOf:
      - $ref: '#/components/schemas/GenericApiResponse'
      - type: object
        required:
        - parameters
        properties:
          parameters:
            type: object
    TunerRun:
      type: object
      required:
      - tunerJobId
      - tunerCoordinatorJobId
      - index
      - created
      - jobStatus
      properties:
        tunerJobId:
          type: integer
        tunerCoordinatorJobId:
          type: integer
        index:
          type: integer
        name:
          type: string
        created:
          type: string
          format: date-time
        jobStatus:
          $ref: '#/components/schemas/JobStatus'
        continuationJobId:
          type: integer
        space:
          type: array
          description: List of impulses specifying the EON Tuner search space
          items:
            $ref: '#/components/schemas/TunerSpaceImpulse'
    TunerSpaceLearnBlock:
      type: object
      additionalProperties: true
    OptimizeConfig:
      type: object
      required:
      - targetDevice
      - targetLatency
      properties:
        name:
          type: string
        targetLatency:
          type: integer
          description: Target latency in MS
          example: 0
        targetDevice:
          type: object
          required:
          - name
          description: Target device
          properties:
            name:
              type: string
              example: cortex-m4f-80mhz
            ram:
              type: integer
              example: 1024
            rom:
              type: integer
              example: 1024
        compiler:
          type: array
          items:
            type: string
        precision:
          type: array
          items:
            type: string
        trainingCycles:
          type: integer
          description: Maximum number of training cycles
          example: 5
        tuningMaxTrials:
          type: integer
          description: Maximum number of trials
          example: 2
        tuningWorkers:
          type: integer
          description: Maximum number of parallel workers/jobs
          example: 1
        initialTrials:
          type: integer
          description: Number of initial trials
          example: 5
        optimizationRounds:
          type: integer
          description: Number of optimization rounds
          example: 3
        trialsPerOptimizationRound:
          type: integer
          description: Number of trials per optimization round
          example: 3
        minMACCS:
          type: number
        maxMACCS:
          type: number
        tuningAlgorithm:
          type: string
          description: Tuning algorithm to use to search hyperparameter space
          enum:
          - random
          - hyperband
          - bayesian
          - custom
        notificationOnCompletion:
          type: boolean
        importProjectMetrics:
          type: boolean
          description: Whether to import metrics for previous EON tuner runs in the same project to accelerate the hyperparameter search process
        importResourceMetrics:
          type: boolean
          description: Whether to import resource usage (RAM/ROM/latency) metrics to accelerate the hyperparameter search process
        numImportProjectMetrics:
          type: number
          description: Number of project trials to import
        numImportResourceMetrics:
          type: number
          description: Number of resource usage trials to import
        enableSEM:
          type: boolean
          description: Enable standard error of the mean (SEM)
        accuracySEM:
          type: number
          description: Standard error of the trial accuracy mean
        latencySEM:
          type: number
          description: Standard error of the trial latency mean
        optimizationObjectives:
          type: array
          description: Hyperparameter optimization objectives and corresponding weights
          items:
            type: object
            required:
            - objective
            - label
            - weight
            properties:
              objective:
                type: string
                description: Objective to optimize
              label:
                type: string
                description: Label of the objective
              weight:
                type: number
                description: Weight of the objective
        rawObjectives:
          type: string
          description: Hyperparameter optimization objectives + weights in string format
        optimizationPrecision:
          type: string
          description: Model variant to optimize for
          enum:
          - float32
          - int8
        earlyStopping:
          type: boolean
          description: Enable trial level early stopping based on loss metrics during training
        earlyStoppingWindowSize:
          type: number
          description: Stops the EON tuner if the feasible (mean) objective has not improved over the past window_size iterations
        earlyStoppingImprovementBar:
          type: number
          description: Threshold (in [0,1]) for considering relative improvement over the best point.
        MOMF:
          type: boolean
          description: Enable Multi-fidelity Multi-Objective optimization
        verboseLogging:
          type: boolean
          description: Enable verbose logging
        disableConstraints:
          type: boolean
          description: Disable search constraints
        disableDeduplicate:
          type: boolean
          description: Disable trial deduplication
        tunerSpaceOptions:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
        space:
          type: array
          description: List of impulses specifying the EON Tuner search space
          items:
            $ref: '#/components/schemas/TunerSpaceImpulse'
        searchSpaceTemplate:
          type: object
          description: Search space template
          required:
          - identifier
          properties:
            identifier:
              type: string
              description: Search space template identifier
              enum:
              - speech_keyword
              - speech_continuous
              - audio_event
              - audio_continuous
              - visual
              - motion_event
              - motion_continuous
              - audio_syntiant
              - object_detection_bounding_boxes
              - object_detection_centroids
              - visual_ad
            classification:
              type: boolean
              description: Whether a classification block should be added to the search space
            anomaly:
              type: boolean
              description: Whether an anomaly block should be added to the search space
            regression:
              type: boolean
              description: Whether a regression block should be added to the search space
        searchSpaceSource:
          type: object
          description: Search space source
          required:
          - type
          properties:
            type:
              type: string
              description: Search space source type
              enum:
              - template
              - run
              - impulse
            templateTitle:
              type: string
              description: Search space source template title
            runTitle:
              type: string
              description: Search space source run title
            impulseTitle:
              type: string
              description: Search space source impulse title
    TunerCreateTrialLearnBlock:
      type: object
      additionalProperties: true
    TunerTrial:
      type: object
      required:
      - id
      - name
      - status
      - blocks
      - impulse
      properties:
        id:
          type: string
        name:
          type: string
        status:
          type: string
          enum:
          - pending
          - running
          - completed
          - failed
        lastCompletedEpoch:
          type: string
          format: date-time
        lastCompletedTraining:
          type: string
          format: date-time
        retries:
          type: integer
        currentEpoch:
          type: integer
        workerId:
          type: string
        blocks:
          type: array
          items:
            type: object
            required:
            - id
            - type
            - retries
            - status
            - blockId
            properties:
              id:
                type: integer
              lastActive:
                type: string
                format: date-time
              retries:
                type: integer
              status:
                type: string
                enum:
                - pending
                - running
                - completed
                - failed
              type:
                type: string
                enum:
                - input
                - dsp
                - learn
              modelBlockIndex:
                type: integer
                description: Index of corresponding DSP/learn block in the impulse model passed to createTrial()
        impulse:
          $ref: '#/components/schemas/TunerTrialImpulse'
        experiment:
          type: string
        original_trial_id:
          type: string
        model:
          type: object
          additionalProperties: true
        dspJobId:
          type: object
          properties:
            training:
              type: number
            testing:
              type: number
        learnJobId:
          type: number
        devicePerformance:
          type: object
          additionalProperties: true
        optimizationRound:
          type: number
        progress:
          type: object
          required:
          - epoch
          - loss
          - val_loss
          - accuracy
          - val_accuracy
          properties:
            epoch:
              type: number
            loss:
              type: number
            val_loss:
              type: number
            accuracy:
              type: number
            val_accuracy:
              type: number
        metrics:
          type: object
          properties:
            test:
              type: object
              properties:
                float32:
                  $ref: '#/components/schemas/KerasModelMetadataMetrics'
                int8:
                  $ref: '#/components/schemas/KerasModelMetadataMetrics'
            train:
              type: object
              properties:
                float32:
                  $ref: '#/components/schemas/KerasModelMetadataMetrics'
                int8:
                  $ref: '#/components/schemas/KerasModelMetadataMetrics'
            validation:
              type: object
              properties:
                float32:
                  $ref: '#/components/schemas/KerasModelMetadataMetrics'
                int8:
                  $ref: '#/components/schemas/KerasModelMetadataMetrics'
        impulseAddedToProject:
          type: object
          required:
          - impulseId
          - link
          properties:
            impulseId:
              type: integer
            link:
              type: string
    KerasCustomMetric:
      type: object
      required:
      - name
      - value
      properties:
        name:
          description: The name of the metric
          type: string
        value:
          description: The value of this metric for this model type
          type: string
    OptimizeStateResponse:
      allOf:
      - $ref: '#/components/schemas/GenericApiResponse'
      - type: object
        required:
        - config
        - status
        - trials
        - workers
        - projectDataType
        - tunerJobIsRunning
        - nextRunIndex
        - isWhitelabel
        properties:
          config:
            $ref: '#/components/schemas/OptimizeConfig'
          status:
            type: object
            required:
            - numPendingTrials
            - numRunningTrials
            - numCompletedTrials
            - numFailedTrials
            - numReadyWorkers
            - numBusyWorkers
            - numPendingWorkers
            - status
            properties:
              numPendingTrials:
                type: integer
              numRunningTrials:
                type: integer
              numCompletedTrials:
                type: integer
              numFailedTrials:
                type: integer
              numReadyWorkers:
                type: integer
              numBusyWorkers:
                type: integer
              numPendingWorkers:
                type: integer
              status:
                type: string
                enum:
                - creating
                - ready
                - running
                - completed
          tunerJobId:
            description: Actual tuner process, job message events will be tagged with this ID
            type: integer
          tunerCoordinatorJobId:
            description: The coordinator pod, attach the job runner to this process for finished events
            type: integer
          continuationJobId:
            description: Job ID for the initial job this job continuous the hyperparameter search process for.
            type: integer
          tuningAlgorithm:
            type: string
            description: Tuning algorithm to use to search hyperparameter space
            enum:
            - random
            - hyperband
            - bayesian
            - custom
          tunerJobIsRunning:
            description: Whether the job is active (if false => finished)
            type: boolean
          trials:
            type: array
            items:
              $ref: '#/components/schemas/TunerTrial'
          projectDataType:
            type: string
            enum:
            - audio
            - image
            - motion
            - other
          jobError:
            type: string
          workers:
            type: array
            items:
              type: object
              required:
              - workerId
              - status
              properties:
                workerId:
                  type: string
                status:
                  type: string
                  enum:
                  - pending
                  - ready
                  - busy
          nextRunIndex:
            type: integer
          isWhitelabel:
            type: boolean
    TunerTrialImpulse:
      type: object
      required:
      - inputBlock
      - dspBlock
      - learnBlock
      properties:
        inputBlocks:
          type: array
          items:
            $ref: '#/components/schemas/TunerCreateTrialInputBlock'
        dspBlocks:
          type: array
          items:
            $ref: '#/components/schemas/TunerCreateTrialDSPBlock'
        learnBlocks:
          type: array
          items:
            $ref: '#/components/schemas/TunerCreateTrialLearnBlock'
    PublicProjectTierAvailability:
      description: For public blocks, this indicates the project tiers for which this block is available.
      type: string
      enum:
      - enterprise-only
      - pro-or-enterprise
      - all-projects
    AdditionalMetric:
      type: object
      required:
      - name
      - value
      - fullPrecisionValue
      properties:
        name:
          type: string
        value:
          type: string
        fullPrecisionValue:
          type: number
        tooltipText:
          type: string
        link:
          type: string
    TunerSpaceDSPBlock:
      type: object
      additionalProperties: true
    TunerCreateTrialInputBlock:
      type: object
      additionalProperties: true
    OptimizeConfigResponse:
      allOf:
      - $ref: '#/components/schemas/GenericApiResponse'
      - $ref: '#/components/schemas/OptimizeConfig'
      - type: object
        properties:
          device:
            type: object
    KerasVisualLayerType:
      type: string
      enum:
      - dense
      - conv1d
      - conv2d
      - reshape
      - flatten
      - dropout
      - batchNormalization
      - transfer_mobilenetv2_a35
      - transfer_mobilenetv2_a1
      - transfer_mobilenetv2_a05
      - transfer_mobilenetv2_160_a1
      - transfer_mobilenetv2_160_a75
      - transfer_mobilenetv2_160_a5
      - transfer_mobilenetv2_160_a35
      - transfer_mobilenetv1_a25_d100
      - transfer_mobilenetv1_a2_d100
      - transfer_mobilenetv1_a1_d100
      - transfer_kws_mobilenetv1_a1_d100
      - transfer_kws_mobilenetv2_a35_d100
      - transfer_kws_syntiant_ndp10x
      - transfer_kws_conv2d_tiny
      - object_ssd_mobilenet_v2_fpnlite_320x320
      - fomo_mobilenet_v2_a01
      - fomo_mobilenet_v2_a35
      - transfer_organization
      - transfer_akidanet_imagenet_160_a100
      - transfer_akidanet_imagenet_160_a50
      - transfer_akidanet_imagenet_160_a25
      - transfer_akidanet_imagenet_224_a100
      - transfer_akidanet_imagenet_224_a50
      - transfer_akidanet_imagenet_224_a25
      - fomo_akidanet_a50
      - fomo_ad_gmm
      - fomo_ad_patchcore
    OptimizeSpaceResponse:
      allOf:
      - $ref: '#/components/schemas/GenericApiResponse'
      - type: object
        required:
        - impulse
        properties:
          impulse:
            type: array
            description: List of impulses specifying the EON Tuner search space
            items:
              $ref: '#/components/schemas/TunerSpaceImpulse'
    OptimizeTransferLearningModelsResponse:
      allOf:
      - $ref: '#/components/schemas/GenericApiResponse'
      - type: object
        required:
        - models
        properties:
          models:
            type: object
            required:
            - image
            - objectDetection
            - kws
            - regression
            - classification
            properties:
              image:
                type: array
                items:
                  $ref: '#/components/schemas/TransferLearningModel'
              objectDetection:
                type: array
                items:
                  $ref: '#/components/schemas/TransferLearningModel'
              kws:
                type: array
                items:
                  $ref: '#/components/schemas/TransferLearningModel'
              regression:
                type: array
                items:
                  $ref: '#/components/schemas/TransferLearningModel'
              classification:
                type: array
                items:
                  $ref: '#/components/schemas/TransferLearningModel'
    WindowSettingsResponse:
      allOf:
      - $ref: '#/components/schemas/GenericApiResponse'
      - type: object
        required:
        - windowSettingsEvent
        - windowSettingsContinuous
        properties:
          windowSettingsEvent:
            type: array
            items:
              $ref: '#/components/schemas/WindowSettings'
          windowSettingsContinuous:
            type: array
            items:
              $ref: '#/components/schemas/WindowSettings'
    WindowSettings:
      type: object
      required:
      - windowSizeMs
      - windowIncreaseMs
      - windowIncreasePct
      - zeroPadPercentage
      - windowCount
      - balanceScore
      - valid
      properties:
        windowSizeMs:
          type: number
        windowIncreaseMs:
          type: number
        windowIncreasePct:
          type: number
        zeroPadPercentage:
          type: number
        windowCount:
          type: integer
        balanceScore:
          type: number
        valid:
          type: boolean
    TransferLearningModel:
      type: object
      required:
      - name
      - shortName
      - description
      - hasNeurons
      - hasDropout
   

# --- truncated at 32 KB (44 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/edge-impulse/refs/heads/main/openapi/edge-impulse-optimization-api-openapi.yml