Exemplo da API REST

Você pode implantar um modelo de Decision Optimization, criar e monitorar trabalhos e obter soluções usando a API REST do tempo de execuçãowatsonx.ai.

Antes de iniciar

Você deve ter uma contaIBM Cloud. Consulte https://www.ibm.com/cloud/.
  1. Efetue login no IBM Cloud.
  2. Crie sua chave de API da nuvem. Copie ou faça o download da chave de API criada com sucesso na janela aberta (você não poderá acessá-la novamente quando fechar essa janela).
  3. Opcional: Crie um serviço de tempo de execução watsonx.ai.
  4. Selecione uma instância de tempo de execução watsonx.ai na lista de serviços AI/ Machine Learning na visualização da lista de recursos IBM Cloud.

    Copie os códigos " Nome, " GUID e " CRN do painel de informações para sua instância " watsonx.ai Tempo de execução. (Para abrir o painel de informações, clique em qualquer lugar da linha ao lado do nome do serviço watsonx.ai Runtime, mas não no nome em si. O painel de informações será aberto na mesma janela)

  5. Opcional: Criar um Cloud Object Storage.
  6. Selecione uma instância de Cloud Object Storage na lista de recursos de armazenamento na exibição de lista IBM Cloud Resource.

    Copie o Nome e o CRN do painel de informações de sua instância de armazenamento.

  7. Opcional: Crie um espaço de implementação a partir da interface do usuário. Você também pode criar um espaço de implantação usando a API REST. Consulte Criação de um espaço de implantação usando a API REST.
  8. Selecione um espaço de implementação na lista de implementações.

    Copie o GUID do espaço na guia Gerenciar > Geral. Para obter mais informações, consulte Espaços de implementação.

Sobre essa tarefa

As etapas a seguir mostram como implantar um modelo de Decision Optimization usando a API REST de tempo de execuçãowatsonx.ai. O exemplo de API de REST usa curl, uma ferramenta de linha de comandos e uma biblioteca para transferir dados com a sintaxe URL. Você pode fazer o download do curl e ler mais sobre ele em http://curl.haxx.se. Para obter mais informações sobre as APIs REST relevantes para Decision Optimization consulte as seções a seguir:

Para usuários do Windows, use ^ em vez de \ para o separador multilinhas e aspas duplas (") ao longo desses exemplos de código. Os usuários do Windows também precisam usar a indentação de pelo menos um espaço por caractere nas linhas de cabeçalho.

Para clareza, alguns exemplos de código neste procedimento foram colocados em um arquivo json para tornar os comandos mais legíveis e mais fáceis de usar.

Depois de criar uma implantação usando a API REST, você também pode visualizá-la e enviar trabalhos para ela na página Deployments > Spaces da interface do usuário.

Procedimento

  1. Gere um token IAM usando sua chave de API da nuvem da seguinte forma.
    curl --request POST "https://iam.cloud.ibm.com/identity/token" \
      -d "apikey=YOUR_API_KEY_HERE&grant_type=urn:ibm:params:oauth:grant-type:apikey" \
      -H "Content-Type: application/x-www-form-urlencoded" \
      -H "Authorization: Basic Yng6Yng="
    Exemplo de saída:
    {
       "access_token": "****** obtained IAM token ******************************",
       "refresh_token": "**************************************",
       "token_type": "Bearer",
       "expires_in": 3600,
       "expiration": 1554117649,
       "scope": "ibm openid"
    }

    Use o token obtido (valor access_token) pré-anexado pela palavra Bearer no cabeçalho Authorization e o watsonx.ai Runtime service GUID no cabeçalho ML-Instance-ID em todas as chamadas da API.

  2. Opcional: Se você não obteve o seu SPACE-ID a partir da interface do usuário como descrito anteriormente, você pode criar um espaço usando a API REST da seguinte forma. Use o token obtido anteriormente, precedido pela palavra bearer no cabeçalho Authorization em todas as chamadas de API. Consulte URLs do ponto de extremidade da nuvem.
    curl --location --request POST \
      "https://api.dataplatform.cloud.ibm.com/v2/spaces" \
      -H "Authorization: Bearer TOKEN-HERE" \
      -H "ML-Instance-ID: MACHINE-LEARNING-SERVICE-GUID-HERE" \
      -H "Content-Type: application/json" \
      --data-raw "{
      "name": "SPACE-NAME-HERE",
      "description": "optional description here",
      "storage": {
          "resource_crn": "COS-CRN-ID-HERE"
      },
      "compute": [{
        "name": "MACHINE-LEARNING-SERVICE-NAME-HERE",
        "crn": "MACHINE-LEARNING-SERVICE-CRN-ID-HERE"
      }]
    }"
    Para usuários do Windows, coloque o comando --data-raw em uma linha e substitua todo " por \" dentro desse comando, conforme a seguir:
    curl --location --request POST ^
      "https://api.dataplatform.cloud.ibm.com/v2/spaces" ^
      -H "Authorization: Bearer TOKEN-HERE" ^
      -H "ML-Instance-ID: MACHINE-LEARNING-SERVICE-GUID-HERE" ^
      -H "Content-Type: application/json" ^
      --data-raw "{\"name\": "SPACE-NAME-HERE",\"description\": \"optional description here\",\"storage\": {\"resource_crn\": \"COS-CRN-ID-HERE\"  },\"compute\": [{\"name\": "MACHINE-LEARNING-SERVICE-NAME-HERE\",\"crn\": \"MACHINE-LEARNING-SERVICE-CRN-ID-HERE\"  }]}"
    Como alternativa, coloque os dados em um arquivo separado.
    Um SPACE-ID é retornado no campo id da seção metadata.

    Exemplo de saída:

    {
      "entity": {
        "compute": [
          {
            "crn": "MACHINE-LEARNING-SERVICE-CRN",
            "guid": "MACHINE-LEARNING-SERVICE-GUID",
            "name": "MACHINE-LEARNING-SERVICE-NAME",
            "type": "machine_learning"
          }
        ],
        "description": "string",
        "members": [
          {
            "id": "XXXXXXX",
            "role": "admin",
            "state": "active",
            "type": "user"
          }
        ],
        "name": "name",
        "scope": {
          "bss_account_id": "account_id"
        },
        "status": {
          "state": "active"
        }
      },
      "metadata": {
        "created_at": "2025-04-17T08:36:57.611Z",
        "creator_id": "XXXXXXX",
        "id": "SPACE-ID",
        "url": "/v2/spaces/SPACE-ID"
      }
    }

    Deve-se aguardar até que o status do espaço de implementação seja "active" antes de continuar. É possível pesquisar para verificar isso conforme a seguir.

    curl --location --request GET "https://api.dataplatform.cloud.ibm.com/v2/spaces/SPACE-ID-HERE" \
      -H "Authorization: bearer TOKEN-HERE" \
      -H "Content-Type: application/json"
  3. Criar um modelo novo Decision Optimization

    Todas as solicitações da API requerem um parâmetro de versão que usa uma data no formato version=YYYY-MM-DD. Este exemplo de código posta um modelo que usa o arquivo create_model.json. O endereço URL varia de acordo com a região/localidade escolhida para o serviço watsonx.ai Runtime. Consulte URLs do ponto de extremidade da nuvem.

    curl --location --request POST \
      "https://us-south.ml.cloud.ibm.com/ml/v4/models?version=2025-08-01" \
      -H "Authorization: bearer TOKEN-HERE" \
      -H "Content-Type: application/json" \
      -d @create_model.json
    O arquivo create_model.json contém o código a seguir:
    {
      "name": "ModelName",
      "description": "ModelDescription",
      "type": "do-docplex_22.2",
      "software_spec": {
        "name": "do_22.2"
      },
      "custom": {
          "decision_optimization": {
            "oaas.docplex.python": "3.12"
          }
      },
      "space_id": "SPACE-ID-HERE"
    }

    A Versão do Python é declarada explicitamente aqui em um bloco custom. Isso é opcional. Sem ele, seu modelo usará a versão padrão, que atualmente é Python 3.12. Como a versão padrão se desenvolverá ao longo do tempo, informar a versão do Python explicitamente permite mudá-la facilmente mais tarde ou continuar usando uma versão suportada mais antiga quando a versão padrão for atualizada. Atualmente, você pode usar Python, 3.12 ou 3.11 (obsoleto).

    Para ser capaz de executar tarefas para esse modelo por meio da interface com o usuário, em vez de usar somente a API de REST, deve-se definir o esquema para os dados de entrada e saída. Se você não definir o esquema ao criar o modelo, será possível executar tarefas somente usando a API de REST e não por meio da interface com o usuário.

    Você também pode utilizar o esquema especificado para entrada e saída em seu modelo de otimização:

    {
      "name": "Diet-Model-schema",
      "description": "Diet",
      "type": "do-docplex_22.2",
      "schemas": {
        "input": [
          {
            "id": "diet_food_nutrients",
            "fields": [
              { "name": "Food",  "type": "string" },
              { "name": "Calories", "type": "double" },
              { "name": "Calcium", "type": "double" },
              { "name": "Iron", "type": "double" },
              { "name": "Vit_A", "type": "double" },
              { "name": "Dietary_Fiber", "type": "double" },
              { "name": "Carbohydrates", "type": "double" },
              { "name": "Protein", "type": "double" }
            ]
          },
          {
            "id": "diet_food",
            "fields": [
              { "name": "name", "type": "string" },
              { "name": "unit_cost", "type": "double" },
              { "name": "qmin", "type": "double" },
              { "name": "qmax", "type": "double" }
            ]
          },
          {
            "id": "diet_nutrients",
            "fields": [
              { "name": "name", "type": "string" },
              { "name": "qmin", "type": "double" },
              { "name": "qmax", "type": "double" }
            ]
          }
        ],
        "output": [
          {
            "id": "solution",
            "fields": [
              { "name": "name", "type": "string" },
              { "name": "value", "type": "double" }
            ]
          }
        ]
      },
      "software_spec": {
        "name": "do_22.2"
      },
      "space_id": "SPACE-ID-HERE"
    }
    
    Ao postar um modelo, você fornece informações sobre seu tipo de modelo e a especificação de software a ser usada.
    Os tipos de modelos podem ser, por exemplo:
    • do-opl_22.2 para modelos OPL
    • do-cplex_22.2 para modelos CPLEX
    • do-cpo_22.2 para modelos CP
    • do-docplex_22.2 para modelos Python

    A versão 22.1 também pode ser usada para esses tipos de modelo.

    Para a especificação do software, você pode usar as especificações padrão usando seus nomes do_22.2 ou do_22.1 (o tempo de execução do_20.1 está obsoleto e será removido em breve). Consulte também o notebook de especificação de software Extend, que mostra como estender a Decision Optimization especificação de software (tempos de execução com bibliotecas Python adicionais para modelos DOcplex).

    Um MODEL-ID é retornado no campo id no metadata.

    Exemplo de saída:
    {
      "entity": {
        "software_spec": {
          "id": "SOFTWARE-SPEC-ID"
        },
        "type": "do-docplex_22.2"
      },
      "metadata": {
        "created_at": "2025-04-17T08:37:22.992Z",
        "description": "ModelDescription",
        "id": "MODEL-ID",
        "modified_at": "2025-04-17T08:37:22.992Z",
        "name": "ModelName",
        "owner": "***********",
        "space_id": "SPACE-ID"
      }
    }
  4. Fazer upload de uma formulação de modelo Decision Optimization pronto para implementação.
    Primeiro, comprima seu modelo em um arquivo (tar.gz, .zip or .jar) e carregue-o para ser implantado pelo serviço watsonx.ai Runtime.
    Esse exemplo de código faz upload de um modelo chamado diet.zip contendo um modelo Python e sem dados principais:
    curl --location --request PUT \
      "https://us-south.ml.cloud.ibm.com/ml/v4/models/MODEL-ID-HERE/content?version=2025-08-01&space_id=SPACE-ID-HERE&content_format=native" \
      -H "Authorization: bearer TOKEN-HERE" \
      -H "Content-Type: application/gzip" \
      --data-binary "@diet.zip"
    Você pode baixar esse exemplo e outros modelos do DO-samples. Selecione a subpasta de produto e versão relevante.
  5. Implementar o seu modelo
    Crie uma referência ao seu modelo. Use o SPACE-ID, o MODEL-ID obtido quando você criou seu modelo pronto para implementação e a especificação de hardware. Por exemplo:
    curl --location --request POST "https://us-south.ml.cloud.ibm.com/ml/v4/deployments?version=2025-08-01" \
      -H "Authorization: bearer TOKEN-HERE" \
      -H "Content-Type: application/json" \
      -d @deploy_model.json
    The deploy_model.json file contains the following code:
    {
      "name": "Test-Diet-deploy",
      "space_id": "SPACE-ID-HERE",
      "asset": {
        "id": "MODEL-ID-HERE"
      },
      "hardware_spec": {
        "name": "S"
      },
      "batch": {}
    }
    O DEPLOYMENT-ID é retornado no campo id no metadata. Exemplo de saída:
    {
      "entity": {
        "asset": {
          "id": "MODEL-ID"
        },
        "custom": {},
        "description": "",
        "hardware_spec": {
          "id": "HARDWARE-SPEC-ID",
          "name": "S",
          "num_nodes": 1
        },
        "name": "Test-Diet-deploy",
        "space_id": "SPACE-ID",
        "status": {
          "state": "ready"
        }
      },
      "metadata": {
        "created_at": "2025-04-17T09:10:50.661Z",
        "description": "",
        "id": "DEPLOYMENT-ID",
        "modified_at": "2025-04-17T09:10:50.661Z",
        "name": "test-Diet-deploy",
        "owner": "**************",
        "space_id": "SPACE-ID"
      }
    }
  6. Uma vez implementado, você pode monitorar o estado de implementação do seu modelo. Use o DEPLOYMENT-ID.
    Por exemplo:
    curl --location --request GET "https://us-south.ml.cloud.ibm.com/ml/v4/deployments/DEPLOYMENT-ID-HERE?version=2025-08-01&space_id=SPACE-ID-HERE" \
      -H "Authorization: bearer TOKEN-HERE" \
      -H "Content-Type: application/json"

    Exemplo de saída:

    {
      "entity": {
        "asset": {
          "id": "MODEL-ID"
        },
        "custom": {},
        "description": "",
        "hardware_spec": {
          "id": "HARDWARE-SPEC-ID",
          "name": "S",
          "num_nodes": 1
        },
        "name": "Test-Diet-deploy",
        "space_id": "SPACE-ID",
        "status": {
          "state": "ready"
        }
      },
      "metadata": {
        "created_at": "2025-11-04T16:22:14.442Z",
        "description": "",
        "id": "DEPLOYMENT-ID",
        "modified_at": "2025-11-04T16:22:14.442Z",
        "name": "test-Diet-deploy",
        "owner": "**************",
        "space_id": "SPACE-ID"
      }
    }
  7. Você pode então Enviar trabalhos para o seu modelo implementado definindo os dados de entrada e a saída (resultados da solução de otimização) e o arquivo de log.
    Por exemplo, a seguir é mostrado o conteúdo de um arquivo chamado myjob.json. Ele contém dados de entrada (sequenciais), alguns parâmetros de resolução e especifica que a saída será um arquivo .csv. Para obter mais informações, consulte Decision Optimization batch deployment and model execution.
    {
    	"name":"test-job-diet",
    	"space_id": "SPACE-ID-HERE",
    	"deployment": {
    		"id": "DEPLOYMENT-ID-HERE"
    	},
    	"decision_optimization" : {
    		"solve_parameters" : {
    			"oaas.logAttachmentName":"log.txt",
    			"oaas.logTailEnabled":"true"
    		},
    		"input_data": [
    			{
    				"id":"diet_food.csv",
    				"fields" : ["name","unit_cost","qmin","qmax"],
    				"values" : [
    					["Roasted Chicken", 0.84, 0, 10],
    					["Spaghetti W/ Sauce", 0.78, 0, 10],
    					["Tomato,Red,Ripe,Raw", 0.27, 0, 10],
    					["Apple,Raw,W/Skin", 0.24, 0, 10],
    					["Grapes", 0.32, 0, 10],
    					["Chocolate Chip Cookies", 0.03, 0, 10],
    					["Lowfat Milk", 0.23, 0, 10],
    					["Raisin Brn", 0.34, 0, 10],
    					["Hotdog", 0.31, 0, 10]
    				]
    			},
    			{
    				"id":"diet_food_nutrients.csv",
    				"fields" : ["Food","Calories","Calcium","Iron","Vit_A","Dietary_Fiber","Carbohydrates","Protein"],
    				"values" : [
    					["Spaghetti W/ Sauce", 358.2, 80.2, 2.3, 3055.2, 11.6, 58.3, 8.2],
    					["Roasted Chicken", 277.4, 21.9, 1.8, 77.4, 0, 0, 42.2],
    					["Tomato,Red,Ripe,Raw", 25.8, 6.2, 0.6, 766.3, 1.4, 5.7, 1],
    					["Apple,Raw,W/Skin", 81.4, 9.7, 0.2, 73.1, 3.7, 21, 0.3],
    					["Grapes", 15.1, 3.4, 0.1, 24, 0.2, 4.1, 0.2],
    					["Chocolate Chip Cookies", 78.1, 6.2, 0.4, 101.8, 0, 9.3, 0.9],
    					["Lowfat Milk", 121.2, 296.7, 0.1, 500.2, 0, 11.7, 8.1],
    					["Raisin Brn", 115.1, 12.9, 16.8, 1250.2, 4, 27.9, 4],
    					["Hotdog", 242.1, 23.5, 2.3, 0, 0, 18, 10.4]
    				]
    			},
    			{
    				"id":"diet_nutrients.csv",
    				"fields" : ["name","qmin","qmax"],
    				"values" : [
    					["Calories", 2000, 2500],
    					["Calcium", 800, 1600],
    					["Iron", 10, 30],
    					["Vit_A", 5000, 50000],
    					["Dietary_Fiber", 25, 100],
    					["Carbohydrates", 0, 300],
    					["Protein", 50, 100]
    				]
    			}
    		],
    		"output_data": [
    			{
    				"id":".*\\.csv"
    			}
    		]
    	}
    }
    Este exemplo de código posta uma tarefa que usa este arquivo myjob.json.
    curl --location --request POST "https://us-south.ml.cloud.ibm.com/ml/v4/deployment_jobs?version=2025-08-01&space_id=SPACE-ID-HERE" \
      -H "Authorization: bearer TOKEN-HERE" \
      -H "Content-Type: application/json" \
      -H "cache-control: no-cache" \
      -d @myjob.json
    
    Um JOB-ID é retornado. Exemplo de saída: (a tarefa é enfileirada)
    {
      "entity": {
        "decision_optimization": {
          "input_data": [{
            "id": "diet_food.csv",
            "fields": ["name", "unit_cost", "qmin", "qmax"],
            "values": [["Roasted Chicken", 0.84, 0, 10], ["Spaghetti W/ Sauce", 0.78, 0, 10], ["Tomato,Red,Ripe,Raw", 0.27, 0, 10], ["Apple,Raw,W/Skin", 0.24, 0, 10], ["Grapes", 0.32, 0, 10], ["Chocolate Chip Cookies", 0.03, 0, 10], ["Lowfat Milk", 0.23, 0, 10], ["Raisin Brn", 0.34, 0, 10], ["Hotdog", 0.31, 0, 10]]
          }, {
            "id": "diet_food_nutrients.csv",
            "fields": ["Food", "Calories", "Calcium", "Iron", "Vit_A", "Dietary_Fiber", "Carbohydrates", "Protein"],
            "values": [["Spaghetti W/ Sauce", 358.2, 80.2, 2.3, 3055.2, 11.6, 58.3, 8.2], ["Roasted Chicken", 277.4, 21.9, 1.8, 77.4, 0, 0, 42.2], ["Tomato,Red,Ripe,Raw", 25.8, 6.2, 0.6, 766.3, 1.4, 5.7, 1], ["Apple,Raw,W/Skin", 81.4, 9.7, 0.2, 73.1, 3.7, 21, 0.3], ["Grapes", 15.1, 3.4, 0.1, 24, 0.2, 4.1, 0.2], ["Chocolate Chip Cookies", 78.1, 6.2, 0.4, 101.8, 0, 9.3, 0.9], ["Lowfat Milk", 121.2, 296.7, 0.1, 500.2, 0, 11.7, 8.1], ["Raisin Brn", 115.1, 12.9, 16.8, 1250.2, 4, 27.9, 4], ["Hotdog", 242.1, 23.5, 2.3, 0, 0, 18, 10.4]]
          }, {
            "id": "diet_nutrients.csv",
            "fields": ["name", "qmin", "qmax"],
            "values": [["Calories", 2000, 2500], ["Calcium", 800, 1600], ["Iron", 10, 30], ["Vit_A", 5000, 50000], ["Dietary_Fiber", 25, 100], ["Carbohydrates", 0, 300], ["Protein", 50, 100]]
          }],
          "output_data": [
            {
              "id": ".*\\.csv"
            }
          ],
          "solve_parameters": {
            "oaas.logAttachmentName": "log.txt",
            "oaas.logTailEnabled": "true"
          },
          "status": {
            "state": "queued"
          }
        },
        "deployment": {
          "id": "DEPLOYMENT-ID"
        },
        "platform_job": {
          "job_id": "",
          "run_id": ""
        }
      },
      "metadata": {
        "created_at": "2025-04-17T10:42:42.783Z",
        "id": "JOB-ID",
        "name": "test-job-diet",
        "space_id": "SPACE-ID"
      }
    }
    
  8. Você também pode monitorar estados de trabalho. Use o JOB-ID
    Por exemplo:
    curl --location --request GET \
      "https://us-south.ml.cloud.ibm.com/ml/v4/deployment_jobs/JOB-ID-HERE?version=2025-08-01&space_id=SPACE-ID-HERE" \
      -H "Authorization: bearer TOKEN-HERE" \
      -H "Content-Type: application/json"
    Exemplo de saída: (a tarefa foi concluída)
    {
      "entity": {
        "decision_optimization": {
          "input_data": [{
            "id": "diet_food.csv",
            "fields": ["name", "unit_cost", "qmin", "qmax"],
            "values": [["Roasted Chicken", 0.84, 0, 10], ["Spaghetti W/ Sauce", 0.78, 0, 10], ["Tomato,Red,Ripe,Raw", 0.27, 0, 10], ["Apple,Raw,W/Skin", 0.24, 0, 10], ["Grapes", 0.32, 0, 10], ["Chocolate Chip Cookies", 0.03, 0, 10], ["Lowfat Milk", 0.23, 0, 10], ["Raisin Brn", 0.34, 0, 10], ["Hotdog", 0.31, 0, 10]]
          }, {
            "id": "diet_food_nutrients.csv",
            "fields": ["Food", "Calories", "Calcium", "Iron", "Vit_A", "Dietary_Fiber", "Carbohydrates", "Protein"],
            "values": [["Spaghetti W/ Sauce", 358.2, 80.2, 2.3, 3055.2, 11.6, 58.3, 8.2], ["Roasted Chicken", 277.4, 21.9, 1.8, 77.4, 0, 0, 42.2], ["Tomato,Red,Ripe,Raw", 25.8, 6.2, 0.6, 766.3, 1.4, 5.7, 1], ["Apple,Raw,W/Skin", 81.4, 9.7, 0.2, 73.1, 3.7, 21, 0.3], ["Grapes", 15.1, 3.4, 0.1, 24, 0.2, 4.1, 0.2], ["Chocolate Chip Cookies", 78.1, 6.2, 0.4, 101.8, 0, 9.3, 0.9], ["Lowfat Milk", 121.2, 296.7, 0.1, 500.2, 0, 11.7, 8.1], ["Raisin Brn", 115.1, 12.9, 16.8, 1250.2, 4, 27.9, 4], ["Hotdog", 242.1, 23.5, 2.3, 0, 0, 18, 10.4]]
          }, {
            "id": "diet_nutrients.csv",
            "fields": ["name", "qmin", "qmax"],
            "values": [["Calories", 2000, 2500], ["Calcium", 800, 1600], ["Iron", 10, 30], ["Vit_A", 5000, 50000], ["Dietary_Fiber", 25, 100], ["Carbohydrates", 0, 300], ["Protein", 50, 100]]
          }],
          "output_data": [{
            "fields": ["Name", "Value"],
            "id": "kpis.csv",
            "values": [["Total Calories", 2000], ["Total Calcium", 800.0000000000001], ["Total Iron", 11.278317739831891], ["Total Vit_A", 8518.432542485823], ["Total Dietary_Fiber", 25], ["Total Carbohydrates", 256.80576358904455], ["Total Protein", 51.17372234135308], ["Minimal cost", 2.690409171696264]]
          }, {
            "fields": ["name", "value"],
            "id": "solution.csv",
            "values": [["Spaghetti W/ Sauce", 2.1551724137931036], ["Chocolate Chip Cookies", 10], ["Lowfat Milk", 1.8311671008899097], ["Hotdog", 0.9296975991385925]]
          }],
          "output_data_references": [],
          "solve_parameters": {
            "oaas.logAttachmentName": "log.txt",
            "oaas.logTailEnabled": "true"
          },
          "solve_state": {
            "details": {
              "KPI.Minimal cost": "2.690409171696264",
              "KPI.Total Calcium": "800.0000000000001",
              "KPI.Total Calories": "2000.0",
              "KPI.Total Carbohydrates": "256.80576358904455",
              "KPI.Total Dietary_Fiber": "25.0",
              "KPI.Total Iron": "11.278317739831891",
              "KPI.Total Protein": "51.17372234135308",
              "KPI.Total Vit_A": "8518.432542485823",
              "MODEL_DETAIL_BOOLEAN_VARS": "0",
              "MODEL_DETAIL_CONSTRAINTS": "7",
              "MODEL_DETAIL_CONTINUOUS_VARS": "9",
              "MODEL_DETAIL_INTEGER_VARS": "0",
              "MODEL_DETAIL_KPIS": "[\"Total Calories\", \"Total Calcium\", \"Total Iron\", \"Total Vit_A\", \"Total Dietary_Fiber\", \"Total Carbohydrates\", \"Total Protein\", \"Minimal cost\"]",
              "MODEL_DETAIL_NONZEROS": "57",
              "MODEL_DETAIL_TYPE": "LP",
              "PROGRESS_CURRENT_OBJECTIVE": "2.6904091716962637"
            },
            "latest_engine_activity": [
              "[2025-04-21T16:37:36Z, INFO] Model: diet",
              "[2025-04-21T16:37:36Z, INFO]  - number of variables: 9",
              "[2025-04-21T16:37:36Z, INFO]    - binary=0, integer=0, continuous=9",
              "[2025-04-21T16:37:36Z, INFO]  - number of constraints: 7",
              "[2025-04-21T16:37:36Z, INFO]    - linear=7",
              "[2025-04-21T16:37:36Z, INFO]  - parameters: defaults",
              "[2025-04-21T16:37:36Z, INFO]  - problem type is: LP",
              "[2025-04-21T16:37:36Z, INFO] Warning: Model: \"diet\" is not a MIP problem, progress listeners are disabled",
              "[2025-04-21T16:37:36Z, INFO] objective: 2.690",
              "[2025-04-21T16:37:36Z, INFO]   \"Spaghetti W/ Sauce\"=2.155",
              "[2025-04-21T16:37:36Z, INFO]   \"Chocolate Chip Cookies\"=10.000",
              "[2025-04-21T16:37:36Z, INFO]   \"Lowfat Milk\"=1.831",
              "[2025-04-21T16:37:36Z, INFO]   \"Hotdog\"=0.930",
              "[2025-04-21T16:37:36Z, INFO] solution.csv"
            ],
            "solve_status": "optimal_solution"
          },
          "status": {
            "completed_at": "2025-04-21T16:37:36.989Z",
            "running_at": "2025-04-21T16:37:35.622Z",
            "state": "completed"
          }
        },
        "deployment": {
          "id": "DEPLOYMENT-ID"
        }
      },
      "metadata": {
        "created_at": "2025-04-21T16:37:09.130Z",
        "id": "JOB-ID",
        "modified_at": "2025-04-21T16:37:37.268Z",
        "name": "test-job-diet",
        "space_id": "SPACE-ID"
      }
    }
    
  9. Opcional: É possível excluir empregos da seguinte forma:
    curl --location --request DELETE "https://us-south.ml.cloud.ibm.com/ml/v4/deployment_jobs/JOB-ID-HERE?version=2025-08-01&space_id=SPACE-ID-HERE&hard_delete=true" \
      -H "Authorization: bearer TOKEN-HERE" 
    Se você excluir uma tarefa usando a API, ela ainda será exibida na interface com o usuário.
  10. Opcional: Você pode excluir implementações da seguinte forma:
    curl --location --request DELETE "https://us-south.ml.cloud.ibm.com/ml/v4/deployments/DEPLOYMENT-ID-HERE?version=2025-08-01&space_id=SPACE-ID-HERE" \
      -H "Authorization: bearer TOKEN-HERE" 
    Se você excluir uma implementação que contenha tarefas usando a API, as tarefas ainda serão exibidas no espaço de implementação na interface com o usuário.

Resultados

Após seu modelo ter sido implementado e a tarefa executada, os resultados da solução serão fornecidos de forma sequencial ou no arquivo e local especificados, por exemplo, usando uma referência S3. É possível postar novas tarefas usando o ID de implementação sem ter que reimplementar seu modelo.