Skip to main content
Trainer flow punya 15 file output, tapi AI utama jalan di section generator — satu prompt per section masterJson, bukan per file DOCX. File: apps/api/src/generation/trainer-section-generator.service.ts
Fungsi prompt: buildPrompt(sectionName, context)

System prompt (semua section)

Model: env.AI_MODEL (default deepseek-v4-flash), temperature: 0.3, max_tokens: 4000, response_format: json_object.

Empat gelombang generate

Gelombang berjalan berurutan; section dalam satu gelombang bisa paralel.

Section tanpa panggilan AI

Ringkasan prompt per section

Wave 1

organizer — JSON: name, letterhead_text, logo_placeholder
Nama lembaga realistis sesuai bidang keahlian.
document — JSON: city, date_text, prepared_by, validator
Kota dari konteks (bukan placeholder <kota>).
people — JSON: trainer, assessor, assessee requirements — JSON: persyaratan peserta & instruktur (pendidikan, pengalaman, kesehatan) training_needs — JSON: items[] analisis kebutuhan (1–2 baris pekerjaan)

Wave 2

curriculum — JSON: items, modules (teori/praktik, topik per modul)
Membaca elemen unit dari WSP.
resources — JSON: materials[], equipment[] (min. 2–3 masing-masing)
Hint peralatan dari variable_constraints WSP bila ada.
safety — JSON: jsa.items[] (5 item Job Safety Analysis, dominan risiko peralatan)

Wave 3

lesson_plan — JSON: sections[] pembukaan, inti (sesuai modul), penutup + durasi JP pretest — JSON: question_bank 5–10 soal PG, question_id format PRE-X posttest — sama struktur, POST-X, topik sama pretest soal berbeda evaluations — JSON: pertanyaan evaluasi trainer (8–10), materi (4–6), penyelenggara (4–6), format Ya/Tidak

Wave 4

assessment — JSON besar: aturan asesmen, observasi per elemen/KUK, demonstrasi, pertanyaan lisan
pretest_scoring.items wajib kosong — diisi otomatis dari soal pre-test di doc 09.
certification — JSON: skema sertifikasi, LSP, scheme_number dari referensi WSP

Setelah masterJson lengkap

Tiap trainer-* composer membaca section yang relevan + unit content deterministik: apps/api/src/generation/composers/trainer/trainer-unit-content.ts
  • Soal pre/post test bisa di-generate dari teks KUK
  • FR.IA.01–03 mengisi checklist dari elemen unit
  • Evaluasi rubric dari bank soal pretest
Jadi 15 dokumen mayoritas aiMode: none di registry — AI sudah “habis” di tahap section.

Context yang disuntik ke setiap prompt

Dari ctxFields() / canonical state:
  • trainingName, unitName, unitCode
  • trainerName, expertise, audience, outcome
  • totalJp, jpMinutes, deliveryMethod, city
  • Section sebelumnya di existingSections (untuk kurikulum → resources → lesson plan)

Retry & parse

  • Max 2 retry per section
  • Parser: tryParseJson + perbaikan trailing comma, single quote, unquoted keys (sama pola generate job utama)

Mengedit prompt trainer

  1. Buka trainer-section-generator.service.tsbuildPrompt() → case section yang ingin diubah
  2. Untuk aturan global JSON, ubah system message di callAI()
  3. Deploy API worker
Untuk mengubah isi template DOCX (bukan prompt), edit composer per dokumen di apps/api/src/generation/composers/trainer/.