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

# Mengedit prompt

> Peta file, versi prompt, dan checklist setelah mengubah perilaku AI.

Panduan singkat untuk developer yang ingin mengubah **tone**, **panjang narasi**, atau **struktur** output AI.

## Peta file

| Mau ubah apa                         | File                                                                                      |
| ------------------------------------ | ----------------------------------------------------------------------------------------- |
| System prompt enricher master        | `apps/api/src/generation/enrichers/ai-enricher.ts` → `SYSTEM_PROMPT`                      |
| Fokus grup per bukti                 | `apps/api/src/generation/document-definitions/master-definitions.ts` → `enrichmentGroups` |
| Prompt section trainer               | `apps/api/src/generation/trainer-section-generator.service.ts` → `buildPrompt()`          |
| Prompt Classroom bukti-5             | `apps/api/src/generation/composers/master/generate-classroom-assignment-content.ts`       |
| Branding knowledge & panduan dokumen | `apps/api/src/ai/prompts/branding-knowledge.ts`                                           |
| Chat interviewer                     | `apps/api/src/ai/prompts/interviewer.prompt.ts`                                           |
| Chat extractor                       | `apps/api/src/ai/prompts/extractor.prompt.ts`                                             |
| Field boleh/k tidak boleh AI         | `exactFieldPaths` / `enrichableFieldPaths` di definisi dokumen                            |
| Skeleton sebelum AI                  | `apps/api/src/generation/composers/master/compose-bukti-*.ts`                             |
| Validasi output                      | `apps/api/src/generation/schemas/`                                                        |

## Versi prompt

Enricher menyimpan provenance:

```ts theme={null}
PROMPT_VERSION = 'master-enricher-v3'
BRANDING_PROMPT_VERSION = 'branding-enricher-v1'
```

Naikkan versi saat mengubah system prompt agar bisa audit job lama di DB/logs.

## Parameter model

| Parameter                   | Nilai umum                | Lokasi                                 |
| --------------------------- | ------------------------- | -------------------------------------- |
| Model                       | `deepseek-v4-flash`       | `AI_MODEL` di `.env`                   |
| Temperature enricher        | \~0.3–0.7                 | `ai-enricher.ts` `callAI()`            |
| Temperature section trainer | `0.3`                     | `trainer-section-generator.service.ts` |
| Max tokens section          | `4000`                    | idem                                   |
| Response format             | `{ type: 'json_object' }` | DeepSeek native                        |

Ganti model ke `deepseek-v4-pro` untuk kualitas lebih tinggi (biaya lebih).

## Checklist setelah edit prompt

<Steps>
  <Step title="Tes lokal">
    ```bash theme={null}
    ./thub env merge
    ./thub dev
    ```

    Generate satu dokumen yang terdampak (master bukti-1, trainer full set, atau branding LinkedIn).
  </Step>

  <Step title="Unit test terkait">
    ```bash theme={null}
    cd apps/api && bun test src/generation/enrichers/
    cd apps/api && bun test src/generation/composers/master/
    ```
  </Step>

  <Step title="Validasi payload">
    Pastikan output masih lolos Zod schema — enricher fallback jika parse gagal.
  </Step>

  <Step title="Deploy">
    ```bash theme={null}
    ./thub secrets push   # jika hanya prompt code, cukup deploy
    ./thub deploy
    ```
  </Step>
</Steps>

## Menambah dokumen baru

1. Buat composer + schema Zod
2. `registerDocument()` di `master-definitions.ts` / `trainer-definitions.ts` / `branding-definitions.ts`
3. Tambah route renderer di `apps/renderer`
4. Jika `aiMode: assist` — definisikan `enrichableFieldPaths` + `enrichmentGroups`
5. Update frontend catalog jika perlu (biasanya auto dari API)

## Anti-patterns

<AccordionGroup>
  <Accordion title="Jangan minta AI ubah kode unit / nama trainer" icon="ban">
    Taruh di `exactFieldPaths`. AI hanya narasi.
  </Accordion>

  <Accordion title="Jangan satu prompt untuk dokumen 20 halaman" icon="ban">
    Pakai `enrichmentGroups` seperti bukti-1 dan bukti-6.
  </Accordion>

  <Accordion title="Jangan hardcode prompt di frontend" icon="ban">
    Semua prompt server-side di `apps/api`.
  </Accordion>
</AccordionGroup>

## Debug job gagal

1. Cek status job di DB / UI sidebar "Generate Gagal"
2. Log worker: `generation-worker.service.ts`
3. Jika `PAYLOAD_VALIDATION_FAILED` — bandingkan output AI vs schema Zod
4. Retry di UI memanggil `handleGenerate()` fresh (bukan reuse job input lama)
