Sometimes you may need to handle or request the resolved inputs and outputs directly from the API or using the Python library.

Overview

Polyaxon provides a Python Library that exposes several methods to fetch information about a run or the currently running operation.

Users can use the library to request the full resolved params (inputs and outputs) and use it during the runtime of their programs. They can additionally add, update, or reset the inputs or outputs programmatically.

Example with the RunClient

Let’s look at a simple program that just prints some information based on an input using the basic Runclient:

from polyaxon.client import RunClient

client = RunClient()
client.refresh_data()
print(client.get_inputs())

In order to run this program, we can use the following polyaxonfile echo.yaml:

version: 1.1
kind: component
inputs:
- name: message
  type: str
  isOptional: true
  value: "Default message"
run:
  kind: job
  init:
    - file:
        content: |
          from polyaxon.client import RunClient

          client = RunClient()
          client.refresh_data()
          print(client.get_inputs())
              
        filename: echo.py
  container:
    image: polyaxon/polyaxon-quick-start
    workingDir: "{{ globals.artifacts_path }}"
    command: [python3, -u, echo.py]

Now you can run multiple version of this example:

polyaxon run -f echo.yaml -P message="test 1" -l
polyaxon run -f echo.yaml -P message="test 2" -l

Example with the tracking module

In the previous example we used the RunClient which is a high-level Python library to interact with the Run API. You probably noticed that we had to refresh the data manually using client.refresh_data().

In most situations, and especially for operations running in-cluster, users will need to interact with their runs using the run tracking class or the tracking module, which provides several more methods for logging and versioning results.

The module also performs several more initializations steps, including an implicit refresh, to provide the latest version of the metadata before your program starts.

Let’s rewrite the program:

from polyaxon import tracking

tracking.init()
print(tracking.TRACKING_RUN.get_inputs())

Let’s update the component:

version: 1.1
kind: component
inputs:
- name: message
  type: str
  isOptional: true
  value: "Default message"
run:
  kind: job
  init:
    - file:
        content: |
          from polyaxon import tracking

          tracking.init()
          print(tracking.TRACKING_RUN.get_inputs())
              
        filename: echo.py
  container:
    image: polyaxon/polyaxon-quick-start
    workingDir: "{{ globals.artifacts_path }}"
    command: [python3, -u, echo.py]

Now you can run multiple version of this example:

polyaxon run -f echo.yaml -P message="test 1" -l
polyaxon run -f echo.yaml -P message="test 2" -l