1
- // aiService.js
2
-
1
+ // aiService.js by **MIA**
2
+ import { buildPrompt } from "./promptBuilder.js" ;
3
3
/**
4
4
* Mengirim prompt ke Groq API melalui Cloudflare Worker kamu.
5
- *
5
+ *
6
6
* @param {object } prompt - Object prompt yang berisi model dan messages
7
7
* @returns {Promise<string> } - Hasil jawaban AI dalam bentuk teks
8
8
*/
@@ -14,20 +14,59 @@ export async function sendToAI(prompt) {
14
14
} ,
15
15
body : JSON . stringify ( prompt )
16
16
} ) ;
17
-
18
- if ( ! response . ok ) throw new Error ( "Gagal menghubungi AI" ) ;
19
-
17
+
18
+ if ( ! response . ok ) {
19
+ // Lebih baik lempar error dengan detail jika respon tidak OK
20
+ const errorData = await response . json ( ) . catch ( ( ) => ( { message : "Respon bukan JSON" } ) ) ;
21
+ throw new Error ( `Gagal menghubungi AI: ${ response . status } - ${ errorData . message || response . statusText } ` ) ;
22
+ }
20
23
const data = await response . json ( ) ;
21
24
return data . choices ?. [ 0 ] ?. message ?. content || "Maaf, tidak ada jawaban." ;
22
25
}
23
26
24
- // Pastikan DOM sudah dimuat sebelum memanggil sendToAI
25
27
document . addEventListener ( 'DOMContentLoaded' , async ( ) => {
28
+ const messagePrompt = "kamu adalah lyra, marketing toko digital daffa" ;
29
+ const chatWelcomeDiv = document . getElementById ( 'chat-welcome' ) ;
26
30
try {
27
- const result = await sendToAI ( "Halo, ini adalah pesan percobaan." ) ;
31
+ // --- PERBAIKAN DI SINI ---
32
+ // Kirim prompt sebagai OBJEK sesuai format yang diharapkan oleh Groq API
33
+ const promptObject = {
34
+ model : "gemma2-9b-it" , // Ganti dengan model Groq yang kamu gunakan rekomen gua: gemma2
35
+ messages : [ { role : "user" , content : messagePrompt } ]
36
+ } ;
37
+
38
+ const result = await sendToAI ( promptObject ) ;
39
+
40
+ // --- BAGIAN PERUBAHAN UTAMA DI SINI ---
41
+ // Ubah konten HTML dari div dengan hasil dari AI
42
+ if ( chatWelcomeDiv ) { // Pastikan elemen ditemukan
43
+ // Kamu bisa langsung menampilkan hasilnya:
44
+ // chatWelcomeDiv.innerText = result;
45
+
46
+ // Atau, jika Kamu ingin mempertahankan beberapa HTML bawaan dan hanya mengganti sebagian,
47
+ // Kamu bisa manipulasi innerHTML atau membuat elemen baru.
48
+ // Contoh: mengganti teks selamat datang dengan respon AI
49
+ chatWelcomeDiv . innerHTML = `<h2 class="font-bold text-4xl text-blue-400">L Y Я A</h2><br>${ result } ` ;
50
+
51
+ // Jika Kamu ingin efek fading atau animasinya, Kamu bisa tambahkan class
52
+ chatWelcomeDiv . classList . remove ( 'opacity-100' , 'blur-0' ) ;
53
+ chatWelcomeDiv . classList . add ( 'opacity-0' , 'blur-sm' ) ; // Sembunyikan dulu
54
+
55
+ setTimeout ( ( ) => {
56
+ chatWelcomeDiv . innerHTML = `<h2 class="font-bold text-4xl text-blue-400">L Y Я A</h2><br>${ result } ` ;
57
+ chatWelcomeDiv . classList . remove ( 'opacity-0' , 'blur-sm' ) ;
58
+ chatWelcomeDiv . classList . add ( 'opacity-100' , 'blur-0' ) ; // Munculkan kembali
59
+ } , 700 ) ; // Sesuaikan dengan durasi transisi CSS Kamu (700ms)
60
+ }
61
+
28
62
console . log ( "Respon dari AI:" , result ) ;
29
- // Di sini kamu bisa melakukan sesuatu dengan 'result', misalnya menampilkannya di UI
30
63
} catch ( error ) {
31
64
console . error ( "Terjadi kesalahan:" , error . message ) ;
65
+ if ( chatWelcomeDiv ) {
66
+ chatWelcomeDiv . innerHTML = `<span class="font-bold text-red-500">Error:</span> ${ error . message } ` ;
67
+ chatWelcomeDiv . classList . add ( 'text-red-500' ) ; // Beri warna merah untuk error
68
+ chatWelcomeDiv . classList . remove ( 'opacity-0' , 'blur-sm' ) ;
69
+ chatWelcomeDiv . classList . add ( 'opacity-100' , 'blur-0' ) ;
70
+ }
32
71
}
33
- } ) ;
72
+ } ) ;
0 commit comments