POST
/
training
/
sft
import PiClient from 'withpi';

const client = new PiClient({
  apiKey: process.env['WITHPI_API_KEY'], // This is the default and can be omitted
});

async function main() {
  const sftStatus = await client.training.sft.startJob({
    examples: [
      {
        llm_input: 'Tell me something different',
        llm_output: 'The lazy dog was jumped over by the quick brown fox',
      },
    ],
    scoring_spec: {
      description: "Write a children's story communicating a simple life lesson.",
      dimensions: [
        {
          description: 'dimension1 description',
          label: 'dimension1',
          sub_dimensions: [
            { description: 'subdimension1 description', label: 'subdimension1', scoring_type: 'PI_SCORER' },
          ],
        },
      ],
      name: 'Sample Scoring Spec',
    },
  });

  console.log(sftStatus.job_id);
}

main();
{
  "detailed_status": [
    "Downloading model",
    "Tuning prompt"
  ],
  "job_id": "1234abcd",
  "state": "RUNNING",
  "trained_models": [
    {
      "epoch": 123,
      "eval_loss": 123,
      "pi_score": 0,
      "serving_id": 123,
      "serving_state": "UNLOADED",
      "step": 123
    }
  ]
}

Authorizations

x-api-key
string
header
required

Body

application/json
examples
object[]
required

Examples to use in the SFT tuning process. We split this data into train/eval 90/10.

An example for training or evaluation

scoring_spec
object
required

The scoring spec to use in the SFT tuning process

base_sft_model
enum<string>

The base model to start the SFT tuning process.

Available options:
LLAMA_3.2_3B,
LLAMA_3.1_8B
learning_rate
number
default:0.0002

SFT learning rate

Example:

0.0002

lora_config
object

The LoRA configuration.

num_train_epochs
integer
default:10

SFT number of train epochs: <= 10.

Example:

10

system_prompt
string | null

A custom system prompt to use during the RL tuning process

Example:

"An optional system prompt."

Response

200
application/json
Successful Response

SftStatus is the status of a SFT job.

detailed_status
string[]
required

Detailed status of the job

Example:
["Downloading model", "Tuning prompt"]
job_id
string
required

The job id

Example:

"1234abcd"

state
enum<string>
required

Current state of the job

Available options:
QUEUED,
RUNNING,
DONE,
ERROR,
CANCELLED
trained_models
object[] | null

A list of trained models selected based on the PI score.