Prove that the fine-tuning job finished and named a model. The job reached the status succeeded and the member fine_tuned_model holds a name. The level does not prove that the model answers a request. No published operation states that.

Contract identity.
FactValue
Contract idopenai.fine_tuning_job.succeeded
Version1.0.0
Hash13b56dac6222a5f4
Completion levelsucceeded
PublisherBuilt and signed by Provely.
CertificationProvisional
SkillOpenAI Platform API 0.1.0
Valid for provider API versionsspec_2_3_0

What is the intent?

Fine-tune the base model on the training file.

What is the subject and the action?

MemberValue
Subject typeopenai.fine_tuning_job
Subject identityfine_tuning_job_id = $action.result.id
Canonical effectai.fine_tuning_job_start
Provider operationPOST /fine_tuning/jobs
Idempotencynone, retry is not safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongfine_tuning_job_id from $action.result.idyes
fingerprintweaktraining_file from $input.training_fileno

Which evidence does the contract require?

Minimum evidence level E2. An independent channel is required. Minimum channels: 1.

ChannelLevelIndependenceVerifierDescription
fine_tuning_job_readbackE2provider readbackhttpRead the fine-tuning job from the provider. A condition path is $observed.fine_tuning_job_readback.status, and a second one is $observed.fine_tuning_job_readback.fine_tuned_model.
fine_tuning_job_succeeded_eventsE3provider eventwebhookThe fine_tuning.job.succeeded events of this job. The payload carries the identifier of the job and no other member of it, so the name of the model comes from the read-back. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
fine_tuning_job_presentThe provider holds the job with the returned identifier.$observed.fine_tuning_job_readback.ideq$action.result.idfine_tuning_job_readback
fine_tuning_job_status_succeededThe job reached the status succeeded.$observed.fine_tuning_job_readback.statuseqsucceededfine_tuning_job_readback
fine_tuning_job_named_a_modelThe member fine_tuned_model holds a name. The schema states that the value is null while the job runs.$observed.fine_tuning_job_readback.fine_tuned_modelexistsundefinedfine_tuning_job_readback
fine_tuning_job_training_file_matchesThe job trained on the file that the intent named.$observed.fine_tuning_job_readback.training_fileeq$input.training_filefine_tuning_job_readback
fine_tuning_job_created_in_windowThe provider created the job after the operation started. OpenAI writes created_at in seconds since the epoch.$observed.fine_tuning_job_readback.created_attime_after$operation.created_atfine_tuning_job_readback
fine_tuning_job_finished_in_windowThe provider finished the job after the operation started. The schema states that finished_at is null while the job runs.$observed.fine_tuning_job_readback.finished_attime_after$operation.created_atfine_tuning_job_readback
fine_tuning_job_succeeded_eventAt least one fine_tuning.job.succeeded event names this job.$observed.fine_tuning_job_succeeded_events.countgte1fine_tuning_job_succeeded_events

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
fine_tuning_job_on_wrong_training_filewrong subjectThe job trained on a different file than the intent named.$observed.fine_tuning_job_readback.training_filene$input.training_file
fine_tuning_job_predates_operationpre existing stateThe fine-tuning job is older than the operation. It proves nothing.$observed.fine_tuning_job_readback.created_attime_before$operation.created_at

Which observed states map to a verdict before completion?

RuleMatchVerdictReason
terminal_failure$observed.fine_tuning_job_readback.status eq "failed"FAILEDThe training did not finish. The member error of the job states the cause.
cancelled$observed.fine_tuning_job_readback.status eq "cancelled"CONTRADICTEDA person or an agent cancelled the fine-tuning job. Ask a person before a second run starts.
still_running$observed.fine_tuning_job_readback.status in ["validating_files","queued","running"]PENDINGThe job has not reached a terminal status. The training may take hours, so the runtime observes again later.

How long does the runtime observe?

Timing memberValue
Initial delay1000 ms
Poll interval30000 ms
Backoffexponential factor 2, max 1800000 ms
Maximum attempts360
Timeout604800000 ms
Stale read window60000 ms
On timeoutUNVERIFIABLE (evidence_unavailable_before_timeout), escalated to a person

Where do these rules come from?

  • openai.openapi#/paths/~1fine_tuning~1jobs/post: openai.openapi, retrieved 2026-09-09
  • openai.openapi#/paths/~1fine_tuning~1jobs/post/responses/200: openai.openapi, retrieved 2026-09-09
  • openai.openapi#/components/schemas/FineTuningJob/properties/status: openai.openapi, retrieved 2026-09-09
  • openai.openapi#/components/schemas/FineTuningJob/properties/fine_tuned_model: openai.openapi, retrieved 2026-09-09
  • openai.docs.fine_tuning#fine-tuning-jobs/the-status-of-a-fine-tuning-job: openai.docs.fine_tuning, retrieved 2026-09-09
  • openai.openapi#/components/schemas/FineTuningJob/properties/id: openai.openapi, retrieved 2026-09-09
  • openai.openapi#/paths/~1fine_tuning~1jobs~1{fine_tuning_job_id}/get/responses/200: openai.openapi, retrieved 2026-09-09
  • openai.docs.fine_tuning#fine-tuning-jobs/the-members-that-a-running-job-leaves-empty: openai.docs.fine_tuning, retrieved 2026-09-09
  • openai.docs.fine_tuning#fine-tuning-jobs/the-fine-tuned-model: openai.docs.fine_tuning, retrieved 2026-09-09
  • openai.openapi#/components/schemas/FineTuningJob/properties/training_file: openai.openapi, retrieved 2026-09-09
  • openai.openapi#/components/schemas/CreateFineTuningJobRequest/properties/training_file: openai.openapi, retrieved 2026-09-09
  • openai.openapi#/components/schemas/FineTuningJob/properties/created_at: openai.openapi, retrieved 2026-09-09
  • openai.openapi#/components/schemas/FineTuningJob/properties/finished_at: openai.openapi, retrieved 2026-09-09
  • openai.events#/events/fine_tuning.job.succeeded: openai.events, retrieved 2026-09-09
  • openai.openapi#/components/schemas/WebhookFineTuningJobSucceeded/properties/data: openai.openapi, retrieved 2026-09-09
  • openai.docs.webhooks#webhooks/the-event-types: openai.docs.webhooks, retrieved 2026-09-09

Can openai.fine_tuning_job.succeeded return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read fine_tuning_job_readback and fine_tuning_job_succeeded_events.

What happens after the timeout?

The verdict is UNVERIFIABLE with the reason evidence_unavailable_before_timeout. The operation goes to a person for review.