File size: 2,904 Bytes
c368720
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# Kelas PemurniPrompt digunakan untuk menganalisis dan memperbaiki prompt sesuai metode/metaprompt yang dipilih pengguna

class PemurniPrompt:
    def __init__(self, api_token, meta_prompts, metaprompt_explanations):
        self.api_token = api_token
        self.meta_prompts = meta_prompts
        self.metaprompt_explanations = metaprompt_explanations

    def automatic_metaprompt(self, prompt):
        """
        Otomatis memilih metaprompt terbaik berdasarkan isi prompt user.
        Return tuple: (analisis, saran_metaprompt)
        """
        # Algoritma dummy — bisa di-upgrade sesuai kebutuhan!
        if not prompt or prompt.strip() == "":
            return "Prompt kosong. Silakan isi prompt.", None

        # Heuristik sederhana: Jika panjang, pilih comprehensive_multistage, jika mengandung 'data', pilih balanced_scientific
        if "data" in prompt.lower():
            analisis = "Prompt ini berkaitan dengan data, disarankan 'balanced_scientific'."
            return analisis, "balanced_scientific"
        elif len(prompt.split()) > 25:
            analisis = "Prompt cukup kompleks, disarankan 'comprehensive_multistage'."
            return analisis, "comprehensive_multistage"
        else:
            analisis = "Prompt normal, gunakan 'logical_flow' untuk hasil optimal."
            return analisis, "logical_flow"

    def refine_prompt(self, prompt, metaprompt_key):
        """
        Melakukan perbaikan prompt secara manual dengan metaprompt terpilih.
        Return: (evaluasi, prompt_baru, penjelasan, full_response)
        """
        if not prompt or prompt.strip() == "":
            return ("Tidak ada prompt yang diberikan.", "", "", {})

        # Dummy refining — gabungkan template metaprompt dengan prompt user
        template = self.meta_prompts.get(metaprompt_key, "")
        if template:
            prompt_baru = f"{template.strip()}\n{prompt.strip()}"
        else:
            prompt_baru = f"[{metaprompt_key}]\n{prompt.strip()}"

        evaluasi = f"Prompt telah diperbaiki menggunakan metaprompt '{metaprompt_key}'."
        penjelasan = self.metaprompt_explanations.get(metaprompt_key, "Tidak ada penjelasan tersedia.")
        full_response = {
            "prompt_awal": prompt,
            "prompt_baru": prompt_baru,
            "metaprompt": metaprompt_key,
            "evaluasi": evaluasi,
            "penjelasan": penjelasan
        }
        return (evaluasi, prompt_baru, penjelasan, full_response)

    def apply_prompt(self, prompt, model):
        """
        Mensimulasikan pengujian prompt pada model LLM.
        Return: string output hasil 'jawaban model'
        """
        if not prompt or not model:
            return "Prompt atau model kosong."

        # Dummy output — ganti dengan pemanggilan API model Anda jika siap
        return f"(MODEL: {model})\nHASIL:\n{prompt[:400]} ...[Output simulasi LLM]"