> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fastino.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Use https://docs.fastino.ai/llms.txt to discover and navigate pages. Use https://docs.fastino.ai/llms-full.txt when you need the complete documentation corpus. Use https://docs.fastino.ai/openapi.json as the source of truth for customer-facing routes. For GLiDE decision inference, call POST https://api.fastino.ai/v1/systemone with model fastino/GLiDE. Create managed config jobs with POST /v1/training/jobs using base_model. For custom training loops, native JSON clients use the public operations under /v1/training/jobs and /v1/training/usage. Existing Tinker clients use tinker==0.32.0 with TINKER_BASE_URL=https://api.fastino.ai/v1/training/compat/tinker and TINKER_CREDENTIAL_CMD. Compatibility child routes are private and absent from OpenAPI. Auto Train is private access and has no public route; direct interested users to sales@fastino.ai. Do not infer undocumented routes. Read API keys from FASTINO_API_KEY and never embed credentials in code, logs, or reports.

# 创建交互式模型

> 通过 base_model 创建交互式 LoRA 训练作业，或从已保存的 from_checkpoint 恢复；作业在 create future 完成后就绪。

`POST /v1/training/jobs/create-model`

Creates an `interactive` LoRA training job on a decoder base model, or a new
job seeded from a saved training state. Your application then sends each
forward-backward pass, optimizer step, checkpoint, and sample. Native JSON
clients do not send `seq_id` values or heartbeats. For managed training from
an uploaded dataset, use [`POST /v1/training/jobs`](/cn/api-reference/training-jobs/create).

The job is ready once its `create` future completes. Read it with
[`GET /v1/training/jobs/{job_id}/futures/{future_id}`](/cn/api-reference/training-jobs/interactive/get-future).

## Request

<ParamField header="X-API-Key" type="string" required>
  Your Fastino API key.
</ParamField>

Send exactly one of `base_model` and `from_checkpoint`.

<ParamField body="base_model" type="string">
  `nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16`,
  `nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16`, or `Qwen/Qwen3.6-35B-A3B`.
</ParamField>

<ParamField body="from_checkpoint" type="string">
  The `path` that [`save-weights`](/cn/api-reference/training-jobs/interactive/save-weights)
  returned for one of your jobs, such as `tinker://<job_id>/weights/<name>`. The
  new job takes that checkpoint's base model and LoRA settings, so omit
  `lora_config`. Sampler checkpoints are rejected.
</ParamField>

<ParamField body="load_optimizer" type="boolean" default="false">
  Set `load_optimizer` with `from_checkpoint` to restore the optimizer state.
</ParamField>

<ParamField body="lora_config" type="object">
  LoRA settings for a new job.

  <Expandable title="properties">
    <ParamField body="rank" type="integer" default="32">
      LoRA rank, from 1 through 32.
    </ParamField>

    <ParamField body="seed" type="integer">
      Adapter initialization seed.
    </ParamField>

    <ParamField body="train_attn" type="boolean" default="true">
      Train attention layers.
    </ParamField>

    <ParamField body="train_mlp" type="boolean" default="true">
      Train MLP layers.
    </ParamField>

    <ParamField body="train_unembed" type="boolean" default="true">
      Train the unembedding layer.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="optimizer_config" type="object">
  Optimizer family. Only `{"type": "adamw"}` is served, which is the default.
</ParamField>

<ParamField body="project_id" type="string">
  Project the job and its usage belong to. Defaults to your default project.
</ParamField>

<ParamField body="user_metadata" type="object">
  Your own JSON metadata for the job.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.fastino.ai/v1/training/jobs/create-model" \
    -H "X-API-Key: $FASTINO_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "base_model": "Qwen/Qwen3.6-35B-A3B",
      "lora_config": {"rank": 32}
    }'
  ```
</RequestExample>

## Response

<ResponseField name="job_id" type="string">
  Interactive job ID. Use it with every `/v1/training/jobs/{job_id}` route.
</ResponseField>

<ResponseField name="type" type="string">
  Always `interactive`.
</ResponseField>

<ResponseField name="base_model" type="string">
  Base model of the job.
</ResponseField>

<ResponseField name="future_id" type="string">
  The job's `create` future.
</ResponseField>

<ResponseField name="load_future_id" type="string | null">
  With `from_checkpoint`, the future that loads the checkpoint.
</ResponseField>

<ResponseExample>
  ```json Response theme={null}
  {
    "job_id": "SESSION_ID:train:0",
    "type": "interactive",
    "base_model": "Qwen/Qwen3.6-35B-A3B",
    "future_id": "FUTURE_ID",
    "load_future_id": null
  }
  ```
</ResponseExample>

## Errors

| Status | Meaning |
| - | - |
| `400` | The model isn't served, the rank is out of range, `from_checkpoint` is a sampler checkpoint, or `lora_config` was sent with `from_checkpoint`. |
| `402` | The team is out of credits or has no valid payment setup. |
| `404` | Interactive training isn't available to the team, or the checkpoint doesn't exist. |
| `422` | Both or neither of `base_model` and `from_checkpoint` were sent, or the body has an unknown field. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.