Skip to content

Commit a0fb846

Browse files
upgrade to github api for intent detection
1 parent 42cbea4 commit a0fb846

File tree

10 files changed

+290
-402
lines changed

10 files changed

+290
-402
lines changed

assets/js/aiService.js

Lines changed: 60 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,75 @@
1-
// aiService.js by **MIA**
2-
import { buildPrompt } from "./promptBuilder.js";
1+
// aiService.js **by MIA**
32
/**
4-
* Mengirim prompt ke Groq API melalui Cloudflare Worker kamu.
3+
* Mengirim pesan pengguna ke Cloudflare Worker (backend AI kamu).
4+
* Worker akan menangani pemrosesan dengan Groq/Gemma dan GitHub API.
55
*
6-
* @param {object} prompt - Object prompt yang berisi model dan messages
7-
* @returns {Promise<string>} - Hasil jawaban AI dalam bentuk teks
6+
* @param {string} userMessage - Pesan teks mentah dari pengguna.
7+
* @returns {Promise<object>} - Objek JSON yang diproses dari Cloudflare Worker
8+
* (berisi { intent, query, message, results, error }).
89
*/
9-
export async function sendToAI(prompt) {
10-
const response = await fetch("https://api-ai.d-adityadwiputraramadhan.workers.dev/", {
11-
method: "POST",
12-
headers: {
13-
"Content-Type": "application/json"
14-
},
15-
body: JSON.stringify(prompt)
16-
});
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}`);
10+
export async function sendToAI(userMessage) {
11+
// PENTING: Ganti dengan URL Cloudflare Worker kamu
12+
const WORKER_URL = "https://lyra-ai.d-adityadwiputraramadhan.workers.dev/";
13+
14+
try {
15+
const response = await fetch(WORKER_URL, {
16+
method: "POST",
17+
headers: {
18+
"Content-Type": "application/json"
19+
},
20+
// PENTING: Mengirim { message: userMessage } ke Worker, bukan objek prompt mentah Groq.
21+
body: JSON.stringify({ message: userMessage })
22+
});
23+
24+
if (!response.ok) {
25+
// Lebih baik lempar error dengan detail jika respon tidak OK
26+
const errorData = await response.json().catch(() => ({ message: "Respon bukan JSON atau error parsing" }));
27+
throw new Error(`Gagal menghubungi AI: ${response.status} - ${errorData.message || response.statusText || 'Unknown error'}`);
28+
}
29+
30+
const data = await response.json();
31+
// Objek ini sudah diproses dan akan memiliki { intent, query, message, results, error }
32+
return data;
33+
34+
} catch (error) {
35+
console.error("Kesalahan dalam sendToAI:", error);
36+
// Lemparkan error agar bisa ditangkap di core-ai.js
37+
throw new Error(`Koneksi AI gagal: ${error.message}`);
2238
}
23-
const data = await response.json();
24-
return data.choices?.[0]?.message?.content || "Maaf, tidak ada jawaban.";
2539
}
2640

2741
document.addEventListener('DOMContentLoaded', async () => {
28-
const messagePrompt = "kamu adalah lyra ✨, Agents GitHub intelligence yang ramah dan profesional dibuat oleh Daffa & jangan terlalu panjang menjawab.";
2942
const chatWelcomeDiv = document.getElementById('chat-welcome');
30-
try {
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-
};
43+
if (chatWelcomeDiv) {
44+
// Tampilkan pesan loading atau placeholder
45+
chatWelcomeDiv.innerHTML = `<h2 class="font-bold text-4xl text-blue-400">L Y Я A</h2><br><p class="text-gray-300 animate-pulse">Memuat AI...</p>`;
3746

38-
const result = await sendToAI(promptObject);
47+
try {
48+
const initialAboutAIResponse = await sendToAI("Kamu siapa?");
3949

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;
50+
if (initialAboutAIResponse.error) {
51+
chatWelcomeDiv.innerHTML = `<span class="font-bold text-red-500">Error:</span> ${initialAboutAIResponse.error}`;
52+
chatWelcomeDiv.classList.add('text-red-500');
53+
} else {
54+
// Ambil pesan 'about_ai' dari properti 'message' yang dikembalikan Worker
55+
const aboutAIText = initialAboutAIResponse.message || "Selamat datang! Ada yang bisa saya bantu?";
4556

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-
}
57+
// Aplikasikan efek fading jika diinginkan
58+
chatWelcomeDiv.classList.remove('opacity-100', 'blur-0');
59+
chatWelcomeDiv.classList.add('opacity-0', 'blur-sm');
6160

62-
// console.log("Respon dari AI:", result);
63-
} catch (error) {
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');
61+
setTimeout(() => {
62+
chatWelcomeDiv.innerHTML = `<h2 class="font-bold text-4xl text-blue-400">L Y Я A</h2><br>${aboutAIText}`;
63+
chatWelcomeDiv.classList.remove('opacity-0', 'blur-sm');
64+
chatWelcomeDiv.classList.add('opacity-100', 'blur-0');
65+
}, 700); // Sesuaikan dengan durasi transisi CSS kamu
66+
}
67+
68+
} catch (error) {
69+
console.error("Terjadi kesalahan saat memuat respons AI:", error.message);
70+
chatWelcomeDiv.innerHTML = `<span class="font-bold text-red-500">Error:</span> Gagal memuat AI. ${error.message}`;
71+
chatWelcomeDiv.classList.add('text-red-500');
7072
}
73+
7174
}
7275
});

0 commit comments

Comments
 (0)