Referensi SDK
@lex/sdk 0.1.2. SDK tidak memegang key apa pun dan tidak melakukan pekerjaan istimewa: setiap pemanggilan adalah pesan ke host, yang meneruskannya ke API untuk diotorisasi.
createLex(options?)
import { createLex } from '@lex/sdk';
const lex = createLex();| Opsi | Bawaan | |
|---|---|---|
timeoutMs | 15000 | Batas waktu per request |
streamIdleTimeoutMs | 120000 | Batas waktu diam untuk requestAgent |
connectTimeoutMs | 10000 | Lama menunggu host tersambung |
port | port dari host | Transport kustom, untuk pengujian |
getContext()
const { user, miniProgram, locale } = await lex.getContext();
// user: { id, displayName? }, miniProgram: { id, version }, locale?: stringnotify(input) · ui.notifications
await lex.notify({ title: 'Tersimpan', message: 'Papan Anda sudah diperbarui', level: 'success' });level bernilai info (bawaan), success, warning, atau error.
storage · storage.scoped
Pribadi untuk workspace ini, pengguna ini, dan Mini Program ini.
await lex.storage.set('tasks', [{ id: 1, title: 'Rencanakan sprint' }]);
const tasks = await lex.storage.get<Task[]>('tasks'); // null jika tidak ada
await lex.storage.remove('tasks');
const keys = await lex.storage.keys();Key maksimal 128 karakter, nilai maksimal 64 KB JSON, maksimal 200 key.
requestAgent(input) · agent.request
Men-streaming jawaban asisten. Keluar dari loop untuk membatalkan.
let answer = '';
for await (const event of lex.requestAgent({ prompt: 'Susun rencana minggu ini untuk tugas-tugas ini: …' })) {
if (event.type === 'delta') answer += event.text;
if (event.type === 'completed') answer = event.output;
if (event.type === 'failed') throw new Error(event.message);
}Sertakan botId untuk bertanya ke bot tertentu. Asisten tidak mendapat tool saat dipanggil dari Mini Program.
ai.text(input) · ai.text
Teks dari model bahasa Lexcetha. Kirim satu prompt, atau percakapan di messages.
const { text, credits } = await lex.ai.text({
system: 'Anda menulis deskripsi produk yang singkat dan ramah.',
prompt: 'Kotak bekal bambu yang bisa dipakai ulang',
maxTokens: 300,
});messages berbentuk [{ role: 'user' | 'assistant', content }] (maksimal 50). maxTokens adalah panjang jawaban maksimal, bawaannya 1024, paling banyak 2048. credits adalah biaya pemanggilan itu bagi Anda.
ai.transcribe(audio, options?) · ai.transcribe
Ucapan menjadi teks. audio adalah Blob berukuran maksimal 10 MB, misalnya dari media.recordAudio().
const { text } = await lex.ai.transcribe(audio, { language: 'id' });language opsional (kode ISO seperti en atau id); tanpanya, model mendeteksi bahasanya sendiri.
ai.speak(text, options?) · ai.speak
Teks menjadi suara, maksimal 4096 karakter. Hasilnya Blob MP3.
const mp3 = await lex.ai.speak('Ringkasan rapat Anda sudah siap.');
new Audio(URL.createObjectURL(mp3)).play();ai.image(prompt, options?) · ai.image
const png = await lex.ai.image('Ilustrasi flat mercusuar saat fajar', { quality: 'high' });
img.src = URL.createObjectURL(png);quality bernilai standard (bawaan) atau high, yang biayanya lebih besar.
ai.video · ai.video
Membuat video butuh beberapa menit. create memulainya, memantaunya, lalu mengembalikan Blob video:
const video = await lex.ai.video.create('Logo 3D berputar di latar putih', {
onProgress: (p) => (bar.value = p), // 0-100
});
player.src = URL.createObjectURL(video);Opsi: intervalMs (seberapa sering dicek, bawaan 3000) dan timeoutMs (bawaan 20 menit; setelah itu gagal dengan TIMEOUT). Untuk mengelolanya sendiri, pakai start(prompt) → { jobId }, status(jobId) → { status: 'queued' | 'running' | 'succeeded' | 'failed', progress, error? }, dan result(jobId) → Blob. Simpan jobId (misalnya di storage) kalau pengguna mungkin menutup Mini Program selagi video dibuat.
media.recordAudio(options?) · media.microphone
Merekam dari mikrofon dan mengembalikan Blob audio. Iframe Anda tidak pernah menyentuh mikrofon: Lex yang meminta izin ke pengguna, menampilkan perekamnya sendiri dengan tombol Stop dan Batal, lalu menyerahkan hasilnya ke Anda.
const audio = await lex.media.recordAudio({ maxSeconds: 1800 });Perekaman berhenti saat pengguna menekan Stop atau setelah maxSeconds (bawaan 600, maksimal 3600). Gagal dengan CANCELLED bila pengguna membatalkan, dan PERMISSION_DENIED bila browser memblokir mikrofon.
Semua pemanggilan ai.* dibayar dari kredit AI Anda dan dihitung ke batas harian tiap pengguna; lihat Model AI & kredit.
Error
Setiap kegagalan menghasilkan LexError dengan code yang stabil:
| Kode | Arti |
|---|---|
PERMISSION_DENIED | Kapabilitas tidak ada di manifest yang disetujui |
INVALID_REQUEST | Input salah (misalnya nilai terlalu besar untuk storage) |
RATE_LIMITED | Terlalu banyak pemanggilan (satu sesi maksimal 2.000), kuota workspace habis, atau pengguna sudah mencapai batas AI hariannya di Mini Program Anda |
TIMEOUT | Tidak ada jawaban tepat waktu |
CANCELLED | Anda menghentikannya |
BRIDGE_UNAVAILABLE | Tidak berjalan di dalam host Lex, atau host tidak tersambung |
UNSUPPORTED_PROTOCOL | SDK dan host memakai versi protokol yang berbeda |
SESSION_ENDED | Sesi runtime berakhir (ditutup, kedaluwarsa setelah satu jam, atau versinya dinonaktifkan) |
INSUFFICIENT_CREDITS | Kredit AI Anda habis (khusus ai.*) |
UNAVAILABLE | Model AI tersebut belum disiapkan di instance Lexcetha ini |
INTERNAL | Ada masalah di platform |
import { LexError } from '@lex/sdk';
try {
await lex.storage.set('besar', nilaiBesar);
} catch (e) {
if (e instanceof LexError && e.code === 'INVALID_REQUEST') tampilkanTerlaluBesar();
}Protokol bridge
@lex/sdk/protocol mengekspor tipe pesan versi 1 untuk siapa pun yang membuat host. Pesan membawa lex: 1; request dan response dipasangkan lewat id, dan stream diakhiri dengan stream_end.
