# Model

Memungkinkan Mini App memakai model AI yang sudah disiapkan di Cowork. API key tetap di dalam Cowork dan tidak pernah sampai ke halaman. Setiap panggilan adalah satu permintaan dan satu balasan: tanpa alat, tanpa riwayat obrolan.

## MAESTROSDK.llm.providers() <Badge type="warning" text="Belum dirilis" />

Menampilkan daftar penyedia model yang siap dipakai (sudah masuk atau punya key), beserta model dan tingkat penalarannya.

### Parameter

Tidak ada.

### Nilai kembalian

`Promise<Provider[]>`. Daftar kosong jika belum ada yang disiapkan, jika halaman tidak punya identitas tab Cowork, atau jika panggilan gagal.

| Field | Tipe | Deskripsi |
|---|---|---|
| `id` | `string` | ID penyedia, diberikan ke `complete` sebagai `provider` |
| `label` | `string` | Nama yang ditampilkan |
| `models[].id` | `string` | ID model, diberikan sebagai `model` |
| `models[].label` | `string` | Nama yang ditampilkan |
| `models[].defaultEffort` | `string` | Tingkat penalaran yang dipakai Cowork secara default |
| `models[].efforts[]` | `{ id, label }[]` | Tingkat penalaran yang diterima model ini; berikan sebuah `id` sebagai `effort` |

### Contoh

```js
const providers = await MAESTROSDK.llm.providers();
const first = providers[0]?.models[0];
```

## MAESTROSDK.llm.complete(request) <Badge type="warning" text="Belum dirilis" />

Mengirim satu prompt ke satu model dan mengembalikan balasan teksnya.

### Parameter

| Nama | Tipe | Wajib | Deskripsi |
|---|---|---|---|
| `request.provider` | `string` | Ya | Sebuah `id` penyedia dari `providers()` |
| `request.model` | `string` | Ya | Sebuah `id` model dari penyedia itu |
| `request.effort` | `string` | Ya | Sebuah `id` tingkat penalaran dari model itu |
| `request.prompt` | `string` | Ya | Prompt, paling banyak 32.000 karakter |

Satu panggilan menunggu model paling lama 120 detik.

### Nilai kembalian

`Promise<{ ok: true, text: string } | { ok: false, error: string }>`

### Error

| `error` | Arti |
|---|---|
| `provider, model, effort and prompt are required` | Ada field yang tidak ada atau kosong |
| `prompt_too_long` | Prompt lebih dari 32.000 karakter |
| `empty_prompt` | Prompt hanya berisi spasi |
| `unknown_model` | Kombinasinya tidak ada di `providers()` |
| `empty_reply` | Model tidak mengembalikan teks |
| `no_instance` | Halaman tidak punya identitas tab Cowork |
| `host_unavailable` | Cowork tidak bisa menerima panggilan |
| Teks lain | Pesan error dari model itu sendiri, atau `model_failed` |

### Contoh

```js
const [provider] = await MAESTROSDK.llm.providers();
const model = provider.models[0];
const reply = await MAESTROSDK.llm.complete({
  provider: provider.id,
  model: model.id,
  effort: model.defaultEffort,
  prompt: 'Summarise this note in one sentence: ...'
});
if (reply.ok) show(reply.text); else showError(reply.error);
```

## Terkait

- [Chat: Model dan Tingkat Penalaran](https://docs.micromeet.ai/id/chat/models.md): Tempat model disiapkan
- [Ikhtisar](https://docs.micromeet.ai/id/miniapp-sdk/overview.md): Semua modul SDK Mini App
